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

时间:2016-09-21 07:54:01

标签: c# excel excel-formula excel-interop excel-dna

我正在使用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())");

我尝试了几件事,并认识到可以根据需要创建尽可能多的UDF,并将它们嵌套在一起。但是,只要您将自己的UDF中的任何两个(或更多)作为参数传递给任何其他函数,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())");

1 个答案:

答案 0 :(得分:0)

评估有很多怪癖(请参阅我的博客文章about Evaluate
不确定你的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