我正在尝试使用OpenXML nuget package阅读一个相当简单的Excel电子表格(保存为xlsx)。
我能够找到我感兴趣的特定Sheet
,但是为了访问单元格值,在其上调用sheet.GetFirstChild<SheetData>()
总是返回null
。我在网上看了几个示例,它们似乎都同意这是访问数据的正确方法。
我尝试读取的xlsx文件可以下载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下载。
我在做什么错了?