Как получить «первый» лист в OOXML с C # и SDK? - PullRequest
10 голосов
/ 05 октября 2011

SO! :) Простой вопрос - его, наверное, задавали, но я не смог его найти. Я получаю данные из XLSX, используя Open XML SDK и C #. Я хочу получить «первый» лист (как в первом, который вы увидите в 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 это вытянуло «Sheet3» вместо «Sheet1». Я заранее не знаю названия листа и не могу заставить пользователя отправить книгу только с одним листом или указать имя листа. Мои нынешние требования - захватить первый лист.

Может кто-нибудь помочь, пожалуйста? :)

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

Я нашел это, перебирая ответы на этот другой ТАК вопрос:

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

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

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

1 Ответ

15 голосов
/ 05 октября 2011

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

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);
...