我正在使用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())");
答案 0 :(得分:0)
评估有很多怪癖(请参阅我的博客文章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