使用OpenXml读取Excel SheetData返回null

时间:2018-10-01 14:35:33

标签: c# .net excel openxml

我正在尝试使用OpenXML nuget package阅读一个相当简单的Excel电子表格(保存为xlsx)。

我能够找到我感兴趣的特定Sheet,但是为了访问单元格值,在其上调用sheet.GetFirstChild<SheetData>()总是返回null。我在网上看了几个示例,它们似乎都同意这是访问数据的正确方法。

我尝试读取的xlsx文件可以下载hereenter image description here

这是我用来读取文件的代码。 var data = sheet.GetFirstChild<SheetData>();行是返回null的地方。

void Main()
{
    using (var s = System.IO.File.OpenRead("c:\\ImportTemplate.xlsx"))
    using (var document = SpreadsheetDocument.Open(s, false))
    {
        foreach (var worksheetPart in document.WorkbookPart.WorksheetParts)
        {
            Sheet sheet = GetSheetFromWorkSheet(document.WorkbookPart, worksheetPart);
            var name = sheet.Name.Value;
            if (name == "ImportData")
            {
                var data = sheet.GetFirstChild<SheetData>(); // <-- data is set to null
                foreach (var row in data.Descendants<Row>()){
                    // [...]
                }
            }
        }

    }
}

public static Sheet GetSheetFromWorkSheet(WorkbookPart workbookPart, WorksheetPart worksheetPart)
{
    string relationshipId = workbookPart.GetIdOfPart(worksheetPart);
    IEnumerable<Sheet> sheets = workbookPart.Workbook.Sheets.Elements<Sheet>();
    return sheets.FirstOrDefault(s => s.Id.HasValue && s.Id.Value == relationshipId);
}

上述代码作为易于运行的LINQPad文件,可以从here下载。

我在做什么错了?

0 个答案:

没有答案