Чтение Excel SheetData с OpenXml возвращает ноль - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь прочитать довольно простую электронную таблицу Excel (сохраненную как xlsx), используя пакет OpenXML nuget .

Я могу найти конкретную Sheet Iменя интересует, но вызов sheet.GetFirstChild<SheetData>() для него, чтобы получить доступ к значениям ячеек, всегда возвращает null.Я просмотрел несколько примеров в Интернете, и все они, похоже, согласны с тем, что это правильный способ доступа к данным.

Файл xlsx, который я пытаюсь прочитать, можно загрузить здесь .enter 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 можно загрузить с здесь .

Что я делаю не так?

...