使用OpenXML读取Excel文件

时间:2015-03-09 22:15:08

标签: c# excel openxml

我正在编写一个c#程序来使用OpenXML读取excel文件。 我在列中的excel文件的列中添加了一个单词列表。我想读取它们并添加到数组列表中。 我使用以下代码

using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePatah + "\\" + fileName, false))
 {
       WorkbookPart workbookPart = doc.WorkbookPart;
       WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
       SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

       ArrayList data = new ArrayList();
       foreach (Row r in sheetData.Elements<Row>())
       {
          foreach (Cell c in r.Elements<Cell>())
          {
             data.Add(c.CellValue.Text);
          }
       }
 }

我所期待的是1,2,3,4等,而我期待着要列出的单词。 我应该怎么做才能得到这些话?

1 个答案:

答案 0 :(得分:3)

实际字符串存储在SharedStringTable中。你得到的只是对该字符串表中元素的引用。

这是您修改的示例,用于从字符串表中检索值:

using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePatah + "\\" + fileName, false))
{
   WorkbookPart workbookPart = doc.WorkbookPart;
   WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
   SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

   ArrayList data = new ArrayList();
   foreach (Row r in sheetData.Elements<Row>())
   {
      foreach (Cell c in r.Elements<Cell>())
      {
        if (c.DataType != null && c.DataType == CellValues.SharedString)
        {
            var stringId = Convert.ToInt32(c.InnerText); // Do some error checking here
            data.Add(workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(stringId).InnerText);
        }
      }
   }
}

请注意,这只是一个粗略的例子。有关更完整的示例,您可以查看here

此外,根据您的需要,您可能会发现使用诸如EPPlus之类的库(您可以直接读取和写入单元格而不必担心实际的文档格式)而不是OpenXML SDK。