繁体   English   中英

使用Open XML读取Excel电子表格时,如何确定表格所在的工作表?

[英]Using Open XML to read an Excel spreadsheet, how do I determine the sheet that a Table is on?

如果我有一个加载的SpreadsheetDocument实例:

SpreadsheetDocument spreadsheetDocument

并遍历WorksheetParts:

foreach (var wp in spreadsheetDocument.WorkbookPart.WorksheetParts)

对于作为“表格”的每个部分,我都可以使用以下方式获得表格定义:

wp.TableDefinitionParts

并抓住第一个条目。 此时,我可以获取表名:

var tableName = tableDefinitionPart.Table.Name;

但是,如何确定此表位于哪张纸上?

给定一个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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM