繁体   English   中英

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

[英]ExcelDNA Evaluate Formula returns ExcelErrorName for custom UDF's

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

Evaluate有很多怪癖(请参阅我有关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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM