C#Interop名称在当前上下文中不存在

时间:2017-03-09 10:03:42

标签: c# excel interop

我正在使用C#Interop从Excel工作表中获取值,具体取决于传递给函数的参数,我收到以下错误:

  

当前上下文中不存在名称“工作表”

这是我的代码:

public void getIndexes(int num) 
{
    var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
    var wsEvars = wb.Sheets["Evars"];
    var wsEvents = wb.Sheets["Events"];

    if (num == 0) 
    {
        var sheet = wsEvars;
    }
    if (num == 2)
    {
        var sheet = wsEvents;
    }

    if (num != 2)
    {
        var rng = (Excel.Range)sheet.Range[sheet.Cells[3, 2], sheet.Cells[3, 25]];
    }
}

我认为sheet变量应该在第一个if语句之前初始化...但是它应该是这个变量的类型,因为它是一个COM对象?

enter image description here

2 个答案:

答案 0 :(得分:1)

您正在寻找的类型是Excel.Worksheet

正如你所推测的那样,你可以在第一个if语句之前声明它。

public void getIndexes(int num) 
{
    var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
    var wsEvars = wb.Sheets["Evars"];
    var wsEvents = wb.Sheets["Events"];

    Excel.Worksheet sheet = null; // Declared here

    if (num == 0) 
    {
        sheet = wsEvars;
        // Rest of code
        ...

作为参考,您可以将鼠标悬停在关键字var上,工具提示会告诉您它将编译的类型。

enter image description here

答案 1 :(得分:0)

如果你有一个Excel互操作的引用设置,那么声明它们是这样的:

Excel.Worksheet sheet = null;
Excel.Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook;
Excel.Worksheet wsEvars = wb.Sheets["Evars"];
Excel.Worksheet wsEvents = wb.Sheets["Events"];