我像这样迭代我的工作表
WorkbookPart wbPart = doc.WorkbookPart;
SharedStringTablePart sstPart = wbPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringTable sst = sstPart.SharedStringTable;
foreach (var wsp in wbPart.WorksheetParts)
{
Worksheet ws = wsp.Worksheet;
// i want to do something like this
if (ws.Name == "People_Sheet")
{
}
}
我需要知道我正在处理哪张纸,以便我可以以不同的方式处理它。如何获取工作表的名称(当我从此处在 Excel 中打开它时显示该名称)?
如果我得到一个工作表列表,我可以通过属性找到它
doc.WorkbookPart.Workbook.Sheets.ToList().ForEach(x => Console.WriteLine(x.GetAttribute("name", "").Value));
但是Sheet和Worksheet之间是什么关系呢?如何从工作表中获取相应的工作表或工作表名称?
UPDATE:
所以我确实找到并尝试了这个如何使用 OpenXML 从 Excel 工作表中检索选项卡名称 https://stackoverflow.com/questions/7504285/how-to-retrieve-tab-names-from-excel-sheet-using-openxml
但是,sheetName 与工作表不匹配。
foreach (var wsp in wbPart.WorksheetParts)
{
Worksheet worksheet = wsp.Worksheet;
var sheetName = wbPart.Workbook.Descendants<Sheet>().ElementAt(sheetIndex).Name;
var rows = worksheet.Descendants<Row>();
...
}
从工作表返回的行与sheetName 指示的工作表中的行不对应。让我尝试进一步解释
我的 Excel 文档中有三个工作表 - 人员、企业、产品(按顺序)
在该循环的第一次迭代中 - 我从工作表行获取的数据引用产品工作表数据,但工作表名称显示“People”