[英]ExcelDNA Evaluate Formula returns ExcelErrorName for custom UDF's
我正在使用ExcelDNA在C#中编写自定义UDF,但这似乎是Excel和公式求值的普遍问题。
我唯一的问题:我做错了什么(也许是错误的UDF定义)还是Excel的问题?
感谢您的帮助。
================================================== =======================
假设我定义这样的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())");
Evaluate有很多怪癖(请参阅我有关Evaluate的博客文章)
不确定您的CONCAT函数是什么,但是此VBA代码对我来说在XL 2016中可以正常工作:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.