如何解决此Microsoft.Office.Excel方法调用中的歧义?

Ton*_*nyP 17 c# excel

我在c#代码中使用office 2007 excel工作表函数.VS2010发出此警告

警告3方法'Microsoft.Office.Interop.Excel._Worksheet.Activate()'与非方法'Microsoft.Office.Interop.Excel.DocEvents_Event.Activate'之间存在歧义.使用方法组.D:\ EXLANEDB01p\dev\libraries\EXCEL\Excel.cs 531 95 EXCEL

我该如何解决这个问题?电话是

xSheet.Activate(); 
Run Code Online (Sandbox Code Playgroud)

xSheet调用中作为ref传递的位置

ref Microsoft.Office.Interop.Excel.Worksheet xSheet
Run Code Online (Sandbox Code Playgroud)

Jef*_*ado 31

您需要消除Activate名称的歧义.在Worksheet界面中,Activate是一个方法(如果被视为一个_Worksheet对象)或一个事件(如果被视为一个DocEvents_Event对象).

Microsoft.Office.Interop.Excel._Worksheet首先将对象转换为然后调用Activate().

((Microsoft.Office.Interop.Excel._Worksheet)xSheet).Activate();
Run Code Online (Sandbox Code Playgroud)

或声明一个新_Worksheet变量并在您的方法中使用它.

_Worksheet sheet = xSheet;
sheet.Activate();
Run Code Online (Sandbox Code Playgroud)

否则,您可以更改方法声明以引用a _Worksheet而不是Worksheet所有关联的声明.

void MyMethod(ref Microsoft.Office.Interop.Excel._Worksheet xSheet)
{
    // ...
}

// usage:
_Worksheet sheet = new Worksheet();
MyMethod(ref sheet);
Run Code Online (Sandbox Code Playgroud)

  • @Protector:我们需要消除'Activate`名称的歧义.在`Worksheet`接口中,`Activate`是一个方法(如果被视为`_Worksheet`对象)或一个事件(如果被视为`DocEvents_Event`对象).编译器不知道如何处理它,所以我们(程序员)需要告诉它如何处理它.在这种情况下,我们应该将其视为工作表,其中名称"Activate"是一种方法. (6认同)
  • 另外,如果我们在开头将变量声明为`_Worksheet`而不是实现`_Worksheet`和`DocEvents_Event`接口的互操作类型`Worksheet`,我们可以避免这一切.即,`_Worksheet xSheet = new Worksheet();` (3认同)