C#互操作的名称未在当前的背景下
问题描述:
我使用C#互操作,以获得从Excel工作表取决于传递给函数的参数的值存在,我收到以下错误:C#互操作的名称未在当前的背景下
the name 'sheet' does not exist in the current context
这是我的代码:
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对象的类型?
答
你要找的类型是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
和工具提示告诉你它将编译的类型。
答
如果你有设置对Excel互操作的参考反正然后宣布他们像这样:
Excel.Worksheet sheet = null;
Excel.Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook;
Excel.Worksheet wsEvars = wb.Sheets["Evars"];
Excel.Worksheet wsEvents = wb.Sheets["Events"];
这只是一个'Excel.Worksheet'在这两种情况下。所以'Excel.Worksheet sheet = null;'在你说的第一个'if'之前。 – Equalsk
如果某人传递了不是“0”或“2”的int值,该怎么办?听起来你可能想要一个'enum'来代替。 – Equalsk
这些值从另一个函数传递,它们可以只有0和2 – Valip