ExcelDNA评估公式返回自定义UDF的ExcelErrorName

我正在使用ExcelDNA在C#中编写自定义UDF,但这似乎是Excel和公式评估的一个普遍问题。

我唯一的问题:我做错了什么(可能是错误的UDF定义),或者这是Excel的问题吗?

感谢您的帮助。

================================================== =======================

UDF

比方说,我定义一个这样的UDF:

[ExcelFunction(IsMacroType = true, Name = "MyTest")] public static string MyTest() { return "MyTest"; } 

加工

以下公式评估工作正常(结果“MyTest”):

 var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest()"); 

不工作

鉴于此评估不起作用(结果将是“ExcelErrorName”):

 var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "CONCAT(MyTest(); MyTest())"); 

我尝试了几件事,并认识到可以创build任意数量的UDF,并将它们嵌套在一起。 但只要您将任意两个(或更多)自己的UDF作为parameter passing给任何其他函数,Excel将无法评估公式。

我也尝试使用Excel的互操作方法返回相应的COM错误:

 var app = ExcelDnaUtil.Application as Application; var result = app.Evaluate("CONCAT(MyTest(), MyTest())"); 

例子

加工

 var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest2(MyTest2(MyTest2()))"); var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest3(MyTest(); CONCAT(\"A\";\"B\"))"); 

不工作

 var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest2(MyTest(); MyTest())"); var evaluation = XlCall.Excel(XlCall.xlfEvaluate, "MyTest2(MyTest(); MyTest3())"); 

有很多与评估怪癖(请参阅我的博客post关于评估 )
不知道你的CONCAT函数是什么,但是这个VBA代码在XL 2​​016中可以正常工作:

 Option Explicit Public Function MyTest() MyTest = "MyTest" End Function Public Function MyTest2() MyTest2 = "MyTest2" End Function Public Function MyTest3(var1, var2) MyTest3 = var1 & var2 End Function Sub evaltest() Dim var As Variant Dim var2 As Variant var = Evaluate("MyTest3(MyTest(), MyTest2())") var2 = Evaluate("CONCATENATE(MyTest(), MyTest2())") End Sub