2017-05-25 34 views
1

我有這個簡單的功能爲excel函數應該是靜態的,而COM對象方法不應該:重複「實現」真的必要?

public double MYSUM(double x, double y) 
{ 
    return x + y; 
} 

在Excel-DNA用它我可以

  • 聲明它static,並通過[ExcelFunction(Description = "blah")]這將最終導致Excel函數preceed它。
  • 非聲明它static並聲明[ComVisible(true)][ClassInterface(ClassInterfaceType.AutoDual)]含有它的類,這將最終導致COM類可調用在VBA

由於以前的情況下,互相排斥的static /非static要求,我的結論我無法編碼一個時間(在一個地方)MYSUM並實現使其可用作Excel函數以及COM對象的方法。我錯了嗎 ?

(當然,我可以做兩個合適的聲明都包裹了獨特double underlyingMYSUM(double, double)做的工作,但我還是不得不在兩個地方寫我的函數VBA和Excel曝光。)

回答

0

Answer from Govert on the Excel-DNA mailing-list

你說得對,基本的Excel-DNA功能是如何工作的。

由於UDF註冊可以在運行時完全動態完成,因此可以從您的COM類自動生成並註冊UDF。 Excel-DNA註冊擴展(https://github.com/Excel-DNA/Registration)顯示了可以採用這種方法的程度。特別是,「InstanceMemberRegistration」示例(https://github.com/Excel-DNA/Registration/blob/master/Source/Samples/Registration.Sample/InstanceMemberRegistration.cs)顯示瞭如何動態註冊實例成員。但是你需要稍微擴展一下這個例子來處理屬性,決定生命週期管理等等。它不是一個完整的實現。

-Govert

相關問題