gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:22 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com