OpenXml WorksheetParts.First()并不总是MS Excel显示的第一张表

时间:2014-11-12 20:46:14

标签: c# openxml openxml-sdk

我有XLSX文件,在Excel中查看时有多张图纸。 但是,在excel中查看时,使用下面代码段的某些文件实际上将WorksheetPart.First作为第2或第3个工作表。 我认为这是因为这些工作表在某一点重新安排在excel中。

问:如何使用OpenXml来阅读"视图"命令MS-Excel显示它们,而不是通过OpenXml可能出现故障? 注意:我无法使用工作表名称作为解决方法。

using (var document = SpreadsheetDocument.Open(".\test.xlsx", false)) { var workbookPart = document.WorkbookPart; var worksheetPart = workbookPart.WorksheetParts.First(); // worksheetPart is not always the first worksheet that Excel shows }

2 个答案:

答案 0 :(得分:3)

我猜工作表部分不一定是有序的。应该按顺序排列的是Workbook.Sheets属性(您也可以在此处按名称搜索)。您可以通过它的ID see here将工作表与其工作表部分关联起来。

答案 1 :(得分:0)

我希望,这样您将获得正确的工作表索引,用于工作表索引。

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Linq;

// ----------------------------------------------------------------------

using (SpreadsheetDocument xl = SpreadsheetDocument.Open(fileName, false))
{
int sheetNo = 0; // Index 0 => sheet 1

WorkbookPart wbPart = xl.WorkbookPart;
Sheet sheet = wbPart.Workbook
                     .Descendants<Sheet>()
                     .ElementAt(sheetNo);
WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(sheet.Id));
}