Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用OpenXML格式SDK从电子表格读取数据?_Excel_Openxml_Spreadsheetml - Fatal编程技术网

Excel 如何使用OpenXML格式SDK从电子表格读取数据?

Excel 如何使用OpenXML格式SDK从电子表格读取数据?,excel,openxml,spreadsheetml,Excel,Openxml,Spreadsheetml,我需要使用OpenXMLSDK2.0从Excel2007工作簿中的单个工作表中读取数据。我花了很多时间寻找基本的指导方针,但我只找到了创建电子表格的帮助 如何使用此SDK迭代工作表中的行,然后迭代每行中的单元格?我这样做的方式是使用Linq。从使用SDK到只使用纯开放XML(没有SDK),在这个主题上有很多示例。看看: (使用纯 OpenXML,不是SDK,而是概念 (非常接近) (使用开放式XML SDK,假设 列表对象) (可能是最好的“总体介绍” 第(条) 另一个答案更像是元答案。自从

我需要使用OpenXMLSDK2.0从Excel2007工作簿中的单个工作表中读取数据。我花了很多时间寻找基本的指导方针,但我只找到了创建电子表格的帮助


如何使用此SDK迭代工作表中的行,然后迭代每行中的单元格?

我这样做的方式是使用Linq。从使用SDK到只使用纯开放XML(没有SDK),在这个主题上有很多示例。看看:

  • (使用纯 OpenXML,不是SDK,而是概念 (非常接近)
  • (使用开放式XML SDK,假设 列表对象)
  • (可能是最好的“总体介绍” 第(条)

    • 另一个答案更像是元答案。自从使用LINQ处理单独的文档部分以来,我一直在努力解决这个问题。下面的代码包含一个包装函数,用于从单元格中获取值,解析任何可能的字符串查找

      public void ExcelDocTest()
      {
      Debug.WriteLine(“在工作表中运行”);
      int rowsComplete=0;
      使用(电子表格文档电子表格文档=
      电子表格文档.Open(@“path\to\Spreadsheet.xlsx”,false))
      {
      WorkbookPart WorkbookPart=电子表格文档.WorkbookPart;
      foreach(workBookPart.Workbook.Subjections()中的工作表s)
      {
      WorksheetPart wsPart=workBookPart.GetPartById(s.Id)作为工作表部件;
      Debug.WriteLine(“工作表{1}:{2}-id({0}){3}”),s.id,s.SheetId,s.Name,
      wsPart==null“未找到!”:“已找到”);
      if(wsPart==null)
      {
      继续;
      }
      行[]行=wsPart.Worksheet.subjects().ToArray();
      //假设第一行包含列名
      foreach(wsPart.Worksheet.subjects()中的行)
      {
      rowsComplete++;
      bool emptyRow=真;
      List rowData=新列表();
      字符串值;
      foreach(行.Elements()中的单元格c)
      {
      值=GetCellValue(c);
      emptyRow=emptyRow&&string.IsNullOrWhiteSpace(值);
      rowData.Add(value);
      }
      WriteLine(“行{0}:{1}”,行,
      emptyRow?“EMPTY!”:string.Join(“,”,rowData));
      }
      }
      }
      WriteLine(“完成,处理了{0}行。”,rowsComplete);
      }
      公共静态字符串GetCellValue(单元格)
      {
      if(单元格==null)
      返回null;
      if(cell.DataType==null)
      返回cell.InnerText;
      字符串值=cell.InnerText;
      开关(cell.DataType.Value)
      {
      案例CellValues.SharedString:
      //对于共享字符串,请在共享字符串表中查找该值。
      //从单元格中获取工作表
      OpenXmlElement父元素=cell.parent;
      而(parent.parent!=null&&parent.parent!=parent
      &&string.Compare(parent.LocalName,“工作表”,true)!=0)
      {
      父=父。父;
      }
      if(string.Compare(parent.LocalName,“工作表”,true)!=0)
      {
      抛出新异常(“无法找到父工作表”);
      }
      工作表ws=作为工作表的父级;
      电子表格文档ssDoc=ws.WorksheetPart.OpenXmlPackage作为电子表格文档;
      SharedStringTablePart sstPart=ssDoc.WorkbookPart.GetPartSoftType().FirstOrDefault();
      //共享字符串表中的查找值
      if(sstPart!=null&&sstPart.SharedStringTable!=null)
      {
      value=sstPart.SharedStringTable.ElementAt(int.Parse(value)).InnerText;
      }
      打破
      //案例中的此案例是从msdn复制的。
      大小写单元格值。布尔值:
      开关(值)
      {
      案例“0”:
      value=“FALSE”;
      打破
      违约:
      value=“TRUE”;
      打破
      }
      打破
      }
      返回值;
      }
      

      编辑:感谢对GetCellValue()的更正。

      您有机会对此进行调查吗?如果我能帮上什么忙,请告诉我。是的,@Otaku,谢谢。“使用LINQ”这篇文章非常有用,尽管除了迭代行和单元格之外,我什么都不做,但它只展示了如何访问工作表。