Как получить «первый» лист в OOXML с помощью C# и SDK?

ТАК! :) Простой вопрос -- наверное, задавали, но я не нашел. Я извлекаю данные из XLSX, используя Open XML SDK и С#. Я хочу получить «первый» лист (как и первый, который вы увидите в Excel), но когда я использую...

WorkbookPart wbPart = workBook.WorkbookPart;
//Now let's find the dimension of the first worksheet 
string sheetArea = wbPart.WorksheetParts.First().Worksheet.SheetDimension.Reference.Value;

К сожалению, в совершенно новом XLSX это вытащило «Лист3» вместо «Лист1». Я не знаю имя листа заранее и не могу заставить пользователя отправить книгу только с одним листом или указать имя листа. Мои нынешние требования - взять первый лист.

Может кто-нибудь помочь? :)

РЕДАКТИРОВАТЬ: Я понял это! Но я не могу ответить на свой вопрос уже 7 часов, так что...

Я нашел это, копаясь в ответах на этот другой вопрос SO:

Open XML SDK 2.0 — как обновить ячейку в электронной таблице?

По сути, рабочий пример может быть таким:

(wbPart.GetPartById(wbPart.Workbook.Sheets.Elements<Sheet>().First().Id.Value) as WorksheetPart).Worksheet.SheetDimension.Reference.Value

person aikeru    schedule 05.10.2011    source источник


Ответы (1)


Насколько я знаю, что-то вроде:

Sheet firstSheet = wbPart.Workbook.Descendants<Sheet>().First();
Worksheet firstWorksheet = ((WorksheetPart)wbPart.GetPartById(firstSheet.Id)).Worksheet;

Должен вернуть первый рабочий лист. Потомки листа рабочей книги всегда должны сортироваться в соответствии с порядком их появления в рабочей книге, по крайней мере, по моему опыту.

Если вы хотите получить первый видимый, используйте:

Sheet firstSheet = wbPart.Workbook.Descendants<Sheet>()
                         .First(s => s.State == SheetStateValues.Visible);
person psantiago    schedule 05.10.2011