利用OpenXML获取Excel单元格的内容

更新时间:2023-07-20 19:59:41 阅读: 评论:0

利用OpenXML查询Excel单元格的内容
在此程序中传递三个参数:工作薄的完整路径、工作表的名称和包含要检索值的单元格地址。然后使用 SpreadsheetDocument 对象的 Open 方法,以 Open XML 包的形式打开输入文件,并将数据载入一个 XML 文档。接着,使用 XmlNamespaceManager 对象并通过 d 限制符设置对默认 worksheetSchema 命名空间的引用,通过 s 限制符设置对 sharedStringSchema小孩眼屎多不想再见 的引用,来设置命名空间管理器。sharedStringSchema 命名空间引用 SharedStringTablePart 部件,该部件包含在多个单元格内共享的字符串。
然后,通过选择 //d:sheet 节点的名称属性,在主工作簿部件中检索代表指定工作表的节点。如果找到节点,则检索工作表的关系 Id,并用其将工作表载入 XML 文档。然后检索值。在节点中,如果 t 属性包含 s,则表示是一个共享的字符串,必须在 SharedStringTablePart 部件中查找。否则,就可以直接从节点检索值。
媒体传播
注意:
此代码只单独检查布尔字符串值。
最后,程序返回单元格的值或一个布尔值,指定搜索是否成功
以下是程序代码:
C#
美女图片清纯public static string XLGetCellValue(string fileName, string sheetName, string addressName)
{
  const string worksheetSchema = "schemas.openxmlformats/spreadsheetml/2006/main";
  const string sharedStringSchema = "schemas.openxmlformats/spreadsheetml/2006/main";
  string cellValue = null;
  //  Retrieve the stream containing the requested
  //  worksheet's info.
  using (SpreadsheetDocument xlDoc = SpreadsheetDocument.Open(fileName, fal))
  {
      //  Get the main document part (l).
      XmlDocument doc = new XmlDocument();
      doc.Load(xlDoc.WorkbookPart.GetStream());
      //  Create a namespace manager, so you can arch.
      //  Add a prefix (d) for the default namespace.
      NameTable nt = new NameTable();
      XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
      nsManager.AddNamespace("d", worksheetSchema);
      nsManager.AddNamespace("s", sharedStringSchema);
      string archString = string.Format("//d:sheet[@name='{0}']", sheetName);
      XmlNode sheetNode = doc.SelectSingleNode(archString, nsManager);
      if (sheetNode != null)
      {
        //  Get the relId attribute.
          XmlAttribute relationAttribute = sheetNode.Attributes["r:id"];
        if (relationAttribute != null)
        {
            string relId = relationAttribute.Value;
            //  Load the contents of the workbook.
            XmlDocument sheetDoc = new XmlDocument(nt);
            sheetDoc.Load(xlDoc.WorkbookPart.GetPartById(relId).GetStream());
            XmlNode cellNode = sheetDoc.SelectSingleNode(string.Format("//d:sheetData/d:row/d:c[@r='{0}']", addressName), nsManager);
            if (cellNode != null)
            {
              XmlAttribute typeAttr = cellNode.Attributes["t"];
              string cellType = string.Empty;
              if (typeAttr != null)
              {
                  cellType = typeAttr.Value;
              }
              XmlNode valueNode = cellNode.SelectSingleNode("d:v", nsManager);
铁路接触网
              if (valueNode != null)
              {
                  cellValue = valueNode.InnerText;
              }
              if (cellType == "b")
              {
                  if (cellValue == "1")
                  {
                    cellValue = "TRUE";
                  }
                  el
                  {
                    cellValue = "FALSE";
                  }
              }
              el if (cellType == "s")
              {
                  if (xlDoc.WorkbookPart.SharedStringTablePart != null)
                  {
                      XmlDocument stringDoc = new XmlDocument(nt);
            stringDoc.Load(xlDoc.WorkbookPart.SharedStringTablePart.GetStream());
电脑微信登录  //  Add the string schema to the namespace manager.
                    nsManager.AddNamespace("s", sharedStringSchema);
                      int requestedString = Convert.ToInt32(cellValue);
                    string strSearch = string.Format("//s:sst/s:si[{0}]", requestedString + 1);
                XmlNode stringNode = stringDoc.SelectSingleNode(strSearch, nsManager);
                      if (stringNode != null)
马桶漏水怎么办
                      {
                          cellValue = stringNode.InnerText;
                      }
                  }
                }
            }
        }百忙之中什么意思
      }
  }
  return cellValue;
}

本文发布于:2023-07-20 19:59:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1089550.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:工作   检索   节点   部件   引用
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图