在 Application.Evaluate 中使用多个 UDF 函数

Posted

技术标签:

【中文标题】在 Application.Evaluate 中使用多个 UDF 函数【英文标题】:Using multiple UDF functions in Application.Evaluate 【发布时间】:2019-08-25 17:55:22 【问题描述】:

我已经用 C# 构建了Excel-Dna Addin。我有几个在某些情况下需要运行的 UDF 函数。 我的单元格包含具有不同参数的 UDF,我在这里展示的是简化版本。

我正在为此使用Application.Evaluate 函数。

我的 UDF:

[ExcelFunction(Name = "Test.TestMe", Description = "Some test", IsHidden = false)]
public static int TestMe(int i)

    return i + 1;

如果我打电话给Application.Evaluate("=Test.TestMe(1)"),我会得到结果 2。

如果我尝试以下操作:Application.Evaluate("=Test.TestMe(1)+Test.TestMe(2)") 我的 UDF 函数都没有被调用。

Evaluate 函数返回:-2146826259 = #Name?

我尝试了以下方法:

    删除了函数名 "Test.TestMe(1)+Test.TestMe(2)" 之前的 = 使用完全限定名称调用。 "myexcel.xlsx!Test.TestMe(1)+Test.TestMe(2)" 我知道Application.Evaluate 限制为 255 个字符。

我想避免解析公式并一一调用我的 UDF。

有什么想法吗?

【问题讨论】:

【参考方案1】:

Charles Williams (https://fastexcel.wordpress.com/2011/11/02/evaluate-functions-and-formulas-fun-how-to-make-excels-evaluate-method-twice-as-fast/) 在描述此限制时指出了一篇(现已丢失的)知识库文章:

如果字符串公式包含对 UDF 和它的名称的引用 如果名称引用发生在 UDF 参考:

如果fred 是命名范围且xyz() 是用户定义的 VBA 函数然后此语句返回错误 2029 [即#NAME?]Application.Evaluate("=xyz(b1)+fred") 此语句返回正确的值:Application.Evaluate("=fred+xyz(b1)") Microsoft 知识库文章 823604 [我找不到] 指出了这个问题,但没有正确诊断出导致它的情况。

由于您的 UDF 名称在 Excel 中也是一个“名称”,因此它可能具有相同的怪癖,给您这个 #NAME? 错误。

所以我认为您遇到了一个长期存在的 Excel 怪癖,您可能希望使用 文件 -> 反馈 -> '发送皱眉' 按钮向 Microsoft 报告此问题。 /p>

【讨论】:

以上是关于在 Application.Evaluate 中使用多个 UDF 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableViewCell 中使 UIView 出队

Java:在 GridLayout 中使组件居中

如何在 TypeScript 中使装饰器类型安全?

如何在 Flutter 的 tabbarwiew 中使 webview 可滚动

在 UITextView 中使图像可点击

如何在发布版本中使标签不可见[关闭]