Я пытаюсь прочитать довольно простую электронную таблицу Excel (сохраненную как xlsx), используя пакет OpenXML nuget .
Я могу найти конкретную Sheet
Iменя интересует, но вызов sheet.GetFirstChild<SheetData>()
для него, чтобы получить доступ к значениям ячеек, всегда возвращает null
.Я просмотрел несколько примеров в Интернете, и все они, похоже, согласны с тем, что это правильный способ доступа к данным.
Файл xlsx, который я пытаюсь прочитать, можно загрузить здесь .
Вот код, который я использую для чтения файла.В строке 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 можно загрузить с здесь .
Что я делаю не так?