result.Number 包含正确的 return 值时的电子表格齿轮 #value

Spreadsheet Gear #value when result.Number contains the correct return value

我正在为 Spreadsheet Gear 开发一个将 VBA 代码移植到 C# 的项目。我的团队已成功移植了大约 150 个自定义 Excel 插件函数。对于其中一个函数,我们的回归电子表格 returns #value 用于 148 次函数调用中的 4 次,其余返回预期结果。当我单步执行代码时,一切都按预期运行并且正确的结果被写入 result.Number,但在 Spreadsheet Gear 中解析为 #value。我完全莫名其妙!请帮助我 - 我什至不知道从哪里开始。

函数结束如下:

if (retval < 0)
{
     result.Text = UtilFuncs.ErrorNum(retval);
}
else
{
     result.Number = retval;
}

retval 包含从调用单独的 DLL 返回的正确结果。当我将鼠标悬停在 result.Number 上时,它也包含正确的结果。但是我得到了一个#value。

如有必要,我可以提供更多代码。我的大问题是为什么它对除其中 4 个以外的所有人都有效。

没有更具体的示例,几乎不可能对此提供明确的答案。不过,我会在黑暗中拍摄。

如果您使用 IArguments methods like IArguments.GetNumber(...), GetLogical(...), etc., to access your custom function's arguments, you might read through the documentation for these. For instance, see the following remark for GetLogical(...):

  • 如果可能,将非逻辑参数转换为逻辑值。 否则,此方法返回 false,并且 一个内部标志是 set 表明发生错误,导致结果 公式出错.

因此,如果您将非布尔值传递给期望布尔值的参数,您的函数最终可能会设置此内部 "error" 标志,从而导致 #VALUE!无论您在方法末尾设置结果对象是什么,都会为此单元格显示错误。

如果是这种情况,可以使用 IArguments.ClearError(...) 方法清除错误。