我想在我的C#代碼中創建一個函數,它可以從VB調用,就好像它是一個宏。在C#中創建Excel宏定義
即VB代碼應該能夠做到:
sub vb_method
csharp_method("some_parameters")
end sub
,並有打電話給我的C#方法:
public object csharp_method(String parameter) {
...
}
我知道這可以用C++來完成:
LPXLOPER retval;
LPXLOPER module; // = something
LPXLOPER parameters[] = { module,
"cpp_function", "parameter_type_info",
"MacroName", "text",
2,
... };
Excel4v(xlfRegister, retval, parameter_count, parameters);
這注冊我的cpp_function
,以便它可以名稱MacroName
調用。但它使用XLOPER的東西(這是一個令人頭疼的問題),它是用C++編寫的。
魔法2
告訴Excel使用我的函數作爲宏。然後我可以從VB調用我的C++代碼,或者使用ExecuteExcel4Macro
。我也可以使用它來註冊用戶定義的函數(UDF) - 只需使用一個神奇的1
來代替。 (有關xlfRegister的更多詳細信息,請參見:http://msdn.microsoft.com/en-us/library/bb687900.aspx)
C#使創建UDF非常容易,但我需要一種方法將函數註冊爲宏而不是公式。
那麼我怎麼能有一個宏調用我的C#代碼?
我希望有一個更原生的機制,但我會試試這個。擁有通用包裝器肯定會比硬編碼包裝器更好。 – Tim 2010-10-26 22:21:02