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中打开工作簿时,我如何才能得到显示在选项卡中的工作表?

这样做之后,我如何获得每个表中的数据?

Excel互操作工作表列表有额外的工作表,userange没有数据

如果您需要过滤您的sheetNames列表,只包括可见的工作表,您可以尝试以下操作:

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

我试过使用xlWorkbook。工作表而不是xlApp.Worksheets。没有区别。

文档说Application.Worksheets属性返回活动工作簿中所有工作表的集合。由于当前活动的工作簿与您的xlWorkbook变量引用的对象相同,因此不可能有任何差异。