我有这个简单的功能
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曝光。)
答案 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