Excel Interop工作表列表有额外的表格,UsedRange没有数据

我正在使用C#的Excel Office Interop。 (在VS 2013)。 我正在使用随Office 2010 Professional Plus附带的Excel版本创build的Excel工作簿。 工作簿具有.xlsx扩展名。

当我在Excel中打开工作簿时,它有4张可见的表格,但是当我使用interop打开工作表时,Worksheets集合包含具有一堆其他名称的工作表,如下所示:

Icons International URLs International Settings DropdownSizer International Translastions Data Validation International Data 

然后在该列表之后,最终出现在工作簿的选项卡中可见的工作表。 但是,当我尝试使用UsedRange中的任何表单时,它都没有数据。

我的代码适用于从同一个Office / Excel安装创build的其他工作簿,只有一张工作表。

这里有一些从我的代码中捣碎一起的代码片断,包括注释,空白检查,debugging代码等。剥离出来:

 private Excel.Application xlApp; private Excel.Workbook xlWorkbook; private Excel.Worksheet xlWorksheet; public Excel.Range usedRange; public void Open(string pathname, int sheetNum = 1) { xlApp = new Excel.Application(); xlWorkbook = xlApp.Workbooks.Open(pathname, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets.get_Item(sheetNum); usedRange = xlWorksheet.UsedRange; } public string[] GetSheetNames() { var sheetNames = new List<string>(); foreach (Excel.Worksheet worksheet in xlApp.Worksheets) { sheetNames.Add(worksheet.Name); } return sheetNames.ToArray(); } public void SetCurrentSheet(int sheetNum) { usedRange = xlWorkbook.Worksheets[sheetNum].UsedRange; } 

我试过使用xlWorkbook.Worksheets而不是xlApp.Worksheets。 没有不同。

如何在Excel中打开工作簿时只显示出现在选项卡中的工作表?

这样做之后,我怎样才能得到每张表中的数据呢?

如果您需要过滤sheetNames列表以仅包含可见工作表,则可以尝试以下操作:

 foreach (Excel.Worksheet worksheet in xlApp.Worksheets) { if (worksheet.Visible == XlSheetVisibility.xlSheetVisible) { sheetNames.Add(worksheet.Name); } } 

我试过使用xlWorkbook.Worksheets而不是xlApp.Worksheets。 没有不同。

该文档说Application.Worksheets属性返回活动工作簿中的所有工作表的集合。 由于当前活动的工作簿与xlWorkbookvariables引用的对象相同,因此不会有任何区别。