Excel互操作工作表列表有额外的工作表,userange没有数据
本文关键字:工作 userange 数据 互操作 列表 Excel | 更新日期: 2023-09-27 18:05:07
我正在使用c#中的Excel Office互操作。(VS 2013)。我使用的Excel工作簿是在Office 2010 Professional Plus附带的Excel版本中创建的。工作簿的扩展名为.xlsx。
当我在Excel中打开工作簿时,它有4个可见的工作表,但是当我使用互操作打开它时,工作表集合包含有一堆其他名称的工作表,如:
Icons
International URLs
International Settings
DropdownSizer
International Translastions
Data Validation
International Data
然后在该列表之后,在工作簿的选项卡中可见的工作表最终出现。但是当我试图获得任何工作表的userange时,它没有数据在里面。
我的代码可以很好地用于从相同的Office/Excel安装创建的其他工作簿,这些工作簿只有单个工作表。
下面是我的一些代码片段,其中包括注释、null检查、调试代码等:
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。工作表而不是xlapp .工作表。没有区别。
当我在Excel中打开工作簿时,我如何才能得到显示在选项卡中的工作表?
这样做之后,我如何获得每个表中的数据?
如果您需要过滤您的sheetNames
列表,只包括可见的工作表,您可以尝试以下操作:
foreach (Excel.Worksheet worksheet in xlApp.Worksheets)
{
if (worksheet.Visible == XlSheetVisibility.xlSheetVisible)
{
sheetNames.Add(worksheet.Name);
}
}
我试过使用xlWorkbook。工作表而不是xlApp.Worksheets。没有区别。
文档说Application.Worksheets
属性返回活动工作簿中所有工作表的集合。由于当前活动的工作簿与您的xlWorkbook
变量引用的对象相同,因此不可能有任何差异。