2016-04-19 1 views
0

Если у меня есть заряженный ТабличныйДокумент экземпляр:Использование Open XML для чтения электронной таблицы Excel, как определить лист, на котором работает таблица?

SpreadsheetDocument spreadsheetDocument 

и итерацию над WorksheetParts:

foreach (var wp in spreadsheetDocument.WorkbookPart.WorksheetParts) 

для каждой части, которая является «таблица» можно получить в определении таблицы с:

wp.TableDefinitionParts 

и захватить первую запись. На этом этапе я могу взять имя таблицы:

var tableName = tableDefinitionPart.Table.Name; 

Но как определить, в каком листе эта таблица находится?

ответ

0

Учитывая WorksheetPart (как назначен wp в коде), то первый список записей Parts будет Packaging.IdPartPair объект:

var parts = wp.Parts.ToList(); 
var idPartPair = parts[0]; 

Если вы посмотрите на значения

idPartPair.OpenXmlPart.Uri.OriginalString 

будет строка, которая выглядит так:

/xl/tables/table2.xml 

Единственное, что вам нужно, это число 2 в этой строке. Верьте или нет, это на самом деле говорит о том, что таблица находится на третьем листе книги (с нулевой основанием)

На этом этапе напишите свой любимый код, чтобы извлечь 2 из вышеуказанного кода. Моя версия, но я уверен, что кто-то другой может сделать это короче:

var sheetNo = int.Parse(string.Concat(Path.GetFileNameWithoutExtension(idPartPair.OpenXmlPart.Uri.OriginalString).Skip(5))); 

Далее, получить список листов:

var sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets.ToList(); 

Затем использовать sheetNo индексировать в него:

var sheet = (Sheet)sheets[sheetNo]; 

Тогда вы можете легко получить имя листа:

var sheetName = sheet.Name;