如果函数的ExcelFunction
属性指定IsMacroType=true
,则Excel-DNA仅允许对Excel的XLL API进行大量调用。我不清楚的原因是为什么简单地将它添加到我的所有功能中并完成它并不是一个好主意;我假设它不是默认值。
与Excel本身的函数计算的波动性有什么关系?如果网上有一个很好的资源来描述IsMacroType=true
的利弊,我很乐意看到它!
答案 0 :(得分:4)
IsMacroType=true
属性更改了Excel-DNA在注册函数时使用的参数,这是通过调用xlfRegister
来完成的,如下所示:https://msdn.microsoft.com/en-us/library/office/bb687900.aspx特别是Excel-DNA在pxTypeText
参数的末尾添加“#”。
文档说:
在
pxTypeText
中的最后一个参数代码后面放置一个#字符 赋予函数与a上的函数相同的调用权限 宏表。具体如下:
该函数可以检索在此重新计算周期中尚未计算的单元格的值。
该函数可以调用任何XLM信息(第2类)函数,例如
xlfGetCell
。如果没有数字符号(#):
- 评估未计算的单元格会导致
xlretUncalced
错误,并且当前函数为。{} 一旦计算出细胞,就再次调用;- 拨打任何XLM 除
xlfCaller
以外的信息功能会产生xlretInvXlfn
错误。
将函数标记为IsMacroType=true
的一些缺点:
IsThreadSafe=true
。object
的{{1}}类型的参数,那么Excel会自动将该函数视为易失性(即使该函数明确标记为[ExcelArgument(AllowReference=true)]
。 )此外,我的理解是这些函数在Excel计算期间的依赖性处理中被区别对待。因此,您可能希望对工作表计算的顺序进行一些更改。不过,我没有参考或复制。
我建议仅在特殊情况下设置IsVolatile=false
,当您知道肯定需要时,并且您准备调查可能出现的任何问题。