【发布时间】:2017-01-29 08:27:17
【问题描述】:
我正在使用 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())");
【问题讨论】:
-
好的 - 我可以重现这个。从 VBA 调用它时的 COM 错误是:错误 2029。它可能类似于此错误:support.microsoft.com/en-us/kb/823604,这似乎与名称解析有关。奇怪的是,如果 UDF 名称是第一个参数,它会起作用......
标签: c# excel excel-formula excel-interop excel-dna