当result.Number包含正确的返回值时,Spreadsheet Gear #value

时间:2017-12-06 17:26:10

标签: c# spreadsheetgear

我正在开发一个将VBA代码移植到C#for Spreadsheet Gear的项目。我的团队成功移植了大约150个自定义Excel加载项功能。对于其中一个函数,我们的回归电子表格返回148个函数调用中的4个#value,其余的返回预期结果。当我单步执行代码时,所有内容都按预期运行,并将正确的结果写入result.Number,但在Spreadsheet Gear中解析为#v​​alue。我完全不知所措!请帮助我 - 我甚至不知道从哪里开始。

该功能的结尾如下:

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

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

如有必要,我可以提供更多代码。我最大的问题是为什么它适用于除了4个之外的所有人。

1 个答案:

答案 0 :(得分:1)

如果没有更具体的例子,就不可能为此提供明确的答案。不过,我会在黑暗中拍摄。

如果您使用IArguments方法,例如IArguments。GetNumber(...),  GetLogical(...)等,要访问自定义函数的参数,您可以阅读这些文档。例如,请参阅GetLogical(...)的以下注释:

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

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

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