excel的函数应该是静态的,而COM对象方法不应该:真正需要复制“实现”吗?

时间:2017-05-25 20:57:41

标签: c# excel vba excel-dna

我有这个简单的功能

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

要在excel-dna中使用它,我可以

  • 声明static并在其前面加[ExcelFunction(Description = "blah")],这最终将导致excel功能。
  • 非声明它static并声明[ComVisible(true)][ClassInterface(ClassInterfaceType.AutoDual)]包含它的类,这将最终导致COM类在VBA中可调用

由于先前案例的互斥static /非static要求,我得出的结论是我无法编码一个时间(在一个地方)MYSUM并实现使其可用作Excel函数以及COM对象的方法。我错了吗?

(当然,我可以做两个合适的声明,包括一个独特的double underlyingMYSUM(double, double)来完成这项工作,但我仍然需要在两个地方编写我的函数的VBA和Excel曝光。)

1 个答案:

答案 0 :(得分:0)

Answer from Govert on the Excel-DNA mailing-list

  

您对Excel-DNA基本功能的运作方式是正确的。

     

由于UDF注册可以在运行时完全动态完成,因此您可以从COM类自动生成和注册UDF。 Excel-DNA注册扩展(https://github.com/Excel-DNA/Registration)显示了采用这种方法的程度。特别是" InstanceMemberRegistration" sample(https://github.com/Excel-DNA/Registration/blob/master/Source/Samples/Registration.Sample/InstanceMemberRegistration.cs)显示了如何动态注册实例成员。但是你需要稍微扩展一下样本来处理属性,决定生命周期管理等等。它不是一个完整的实现。

     

-Govert