我正在编写一个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等,而我期待着要列出的单词。 我应该怎么做才能得到这些话?
答案 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。