2010-07-24 8 views
14

Używam funkcji arkusza roboczego Excel 2007 excel w kodzie C#. kwestie VS2010 to ostrzeżenieJak mogę rozwiązać niejednoznaczność w wywołaniu metody Microsoft.Office.Excel?

Warning 3 dwuznaczność pomiędzy metodą 'Microsoft.Office.Interop.Excel._Worksheet.Activate()' i braku metody „Microsoft.Office.Interop.Excel.DocEvents_Event.Activate ". Przy użyciu metody grupa . D: \ EXLANEDB01p \ dev \ bibliotek \ EXCEL \ Excel.cs 531 95 EXCEL

Jak rozwiązać ten problem? połączenie jest

xSheet.Activate(); 

gdzie xSheet przekazywane jako ref w zaproszeniu jako

ref Microsoft.Office.Interop.Excel.Worksheet xSheet 

Odpowiedz

28

Trzeba disambiguate nazwę Activate. W interfejsie arkusza roboczego Activate jest albo metodą (jeśli jest postrzegany jako obiekt _Worksheet), albo zdarzeniem (jeśli jest postrzegany jako obiekt DocEvents_Event).

Najpierw prześlij swój obiekt pod numer Microsoft.Office.Interop.Excel._Worksheet, a następnie zadzwoń pod numer Activate().

((Microsoft.Office.Interop.Excel._Worksheet)xSheet).Activate(); 

Lub zadeklaruj nową zmienną _Worksheet i użyj jej w swojej metodzie.

_Worksheet sheet = xSheet; 
sheet.Activate(); 

Inaczej można zmienić deklarację metody wziąć odniesienie do _Worksheet zamiast Worksheet oraz wszystkich powiązanych deklaracji.

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

// usage: 
_Worksheet sheet = new Worksheet(); 
MyMethod(ref sheet); 
+0

Dzięki .. że rozwiązano waring .. Tony – TonyP

+0

Każdy pomysł, dlaczego to działa? Po prostu ciekawy. –

+5

@ Protektor: musimy ujednoznacznić nazwę "Aktywuj". W interfejsie 'Worksheet'' Activate' jest albo metodą (jeśli jest postrzegana jako obiekt '_Worksheet'), albo zdarzeniem (jeśli jest traktowane jako obiekt' DocEvents_Event'). Kompilator nie był pewien, co z tym zrobić, abyśmy (programista) musieli powiedzieć, co z tym zrobić. W takim przypadku powinniśmy spojrzeć na to jako arkusz roboczy, gdzie nazwa "Aktywuj" jest metodą. –

Powiązane problemy