2017-05-25 21 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

相关问题