ExcelDNA评估公式返回自定义UDF的ExcelErrorName
我正在使用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())");
我尝试了几件事,并认识到可以创build任意数量的UDF,并将它们嵌套在一起。 但只要您将任意两个(或更多)自己的UDF作为parameter passing给任何其他函数,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())");
有很多与评估怪癖(请参阅我的博客post关于评估 )
不知道你的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
- 类库中的System.NullReferenceException
- 需要自定义validation(date+特定的文本)在Excel中生成使用C#
- 在MVC应用程序中将数据导出到Excel
- 将Excel范围转换为ADO.NET DataSet或DataTable等
- InvalidCastException – 无法转换types为“Microsoft.Office.Interop.Outlook.ApplicationClass”的COM对象
- 我可以确定一个开放的Excel工作簿的临时path吗?
- 读取/写入Excel 2007密码保护的文档
- 从Excel VBA调用未注册的.NET DLL
- 填充Excel表格时出现“列超出范围”错误