如果我调用不带括号的函数,为什么用户在Excel DNA中定义的excel函数返回随机数?

时间:2019-06-21 13:07:39

标签: c# .net excel-dna

我正在制作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。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

但是对于正常使用,我不知道您可以采取任何措施来解决此内置Excel行为。