如何使用C#和SDK获取OOXML中的"第一张"表?

aik*_*eru 10 c# xml excel sdk openxml

所以!:)简单的问题 - 它可能被问到,但我找不到它.我正在使用Open XML SDK和C#从XLSX检索数据.我想获得"第一张"表(就像你在Excel中看到的第一张),但是当我使用时......

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

不幸的是,在一个全新的XLSX中,这拉动了"Sheet3"而不是"Sheet1".我提前不知道工作表名称,也不能强制用户只提交一张工作簿或指定工作表名称.我目前的要求是抓住第一张纸.

有人可以帮忙吗?:)

编辑:我想通了!但我无法回答7个小时的问题,所以......

我通过挖掘其他SO问题的答案找到了这个:

Open XML SDK 2.0 - 如何更新电子表格中的单元格?

从本质上讲,一个工作的例子可能是这样的:

(wbPart.GetPartById(wbPart.Workbook.Sheets.Elements<Sheet>().First().Id.Value) as WorksheetPart).Worksheet.SheetDimension.Reference.Value
Run Code Online (Sandbox Code Playgroud)

小智 16

据我所知,像:

Sheet firstSheet = wbPart.Workbook.Descendants<Sheet>().First();
Worksheet firstWorksheet = ((WorksheetPart)wbPart.GetPartById(firstSheet.Id)).Worksheet;
Run Code Online (Sandbox Code Playgroud)

应该返回第一个工作表.工作簿Sheet后代应始终根据它们在工作簿中出现的顺序进行排序,至少根据我的经验.

如果您希望第一个可见,请使用:

Sheet firstSheet = wbPart.Workbook.Descendants<Sheet>()
                         .First(s => s.State == SheetStateValues.Visible);
Run Code Online (Sandbox Code Playgroud)