C#互操作当前上下文中不存在该名称

C#互操作当前上下文中不存在该名称,c#,excel,interop,C#,Excel,Interop,根据传递给函数的参数,我使用C#Interop从Excel工作表中获取值,我得到以下错误: 当前上下文中不存在名称“sheet” 这是我的代码: public void getIndexes(int num) { var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; var wsEvars = wb.Sheets["Evars"]; var wsEvents = wb.Sheets[

根据传递给函数的参数,我使用C#Interop从Excel工作表中获取值,我得到以下错误:

当前上下文中不存在名称“sheet”

这是我的代码:

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]];
    }
}
我假设
工作表
变量应该在第一个
if
语句之前初始化……但是由于它是COM对象,该变量的类型应该是什么


如果您已经设置了对Excel互操作的引用,则按如下方式声明它们:

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

你要找的类型是

正如您正确猜测的,您可以在第一个
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
上,工具提示会告诉您它将编译到的类型


在这两种情况下,它都只是一个
Excel.Worksheet
。So
Excel.workeep sheet=nullif
之前的code>如您所说。如果有人传递的
int
值不是
0
2
,该怎么办?听起来您可能需要一个
enum
。这些值是从另一个函数传递的,它们只能是0和2@Equalsk你的解决方案有效!你应该把它作为回答再问一个问题…你还知道我如何从我的代码中指定的范围中获取值吗?我尝试了
var wsValues=rng.Value()但是没有work@Valip在我的脑海里,我认为这是
var-values=rng.Cells.Value(可能是
Value2
),然后
values
保存一个值数组。不过,手头没有要测试的互操作项目。它使用
var values=rng.Cells.Value,谢谢!