首页 > 解决方案 > 如果我在没有括号的情况下调用函数,为什么我在 Excel DNA 中的用户定义的 excel 函数会返回随机数?

问题描述

我正在制作一个 Excel DNA excel 插件。我使用“ExcelFunctionAttribute”创建了一些用户定义的函数。现在,当我在不带括号的情况下调用此函数时,它会返回一个随机数。

假设我的功能是:

[ExcelFunction(Description= "Hello Function", IsVolatile = true)]
public static string Hello(string name)
{
    return "Hello "+name;
}

我有3个场景:

  1. 如果我在 excel 中调用该函数为 =Hello("XYZ") 它返回 Hello XYZ。

  2. 如果我在 excel 中将该函数调用为 =Hello() 它会出错。

  3. 如果我在 excel 中将该函数称为 =Hello,它会给出一个随机数,例如 -17453245。

在我的这种情况下,我没有给出括号。那么有人可以告诉我为什么会这样吗?我该如何解决这个问题?

提前致谢。

标签: c#.netexcel-dna

解决方案


调用不带括号的函数时看到的数字不是随机数,而是用户定义函数的“注册 ID”。它是 Excel 分配给注册 UDF 的内部名称的内部 ID。

当公式只有不带括号的 UDF 名称时,Excel 永远不会调用加载项,因此加载项实际上无法返回类似 #NAME? 的其他内容。

在某些情况下,甚至可以使用此“功能”构建更强大的函数,您可以使用不带括号的函数名称并在内部对其进行评估。

但是对于正常使用,我不知道您可以做些什么来解决这个内置的 Excel 行为。


推荐阅读