我正在使用 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 就无法计算公式。
我还尝试使用返回相应 COM 错误的 Excel 互操作方法:
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 有很多怪癖(请参阅我的博客文章 about 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
关于c# - ExcelDNA 评估公式为自定义 UDF 返回 ExcelErrorName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39610594/