仅当函数的ExcelFunction
属性指定时,Excel-DNA才允许多次调用Excel的XLL API IsMacroType=true
。我不清楚的是为什么仅将其添加到我的所有函数中并用它完成不是一个好主意;为什么?我假设不是默认值。
与Excel本身的函数计算的可变性有关吗?如果网上有不错的资源描述IsMacroType=true
我的优缺点,我希望看到它!
该IsMacroType=true
属性会更改Excel-DNA在注册函数时使用的参数,此操作通过调用来完成,如此处所述xlfRegister
:https : //msdn.microsoft.com/zh-cn/library/office/bb687900.aspx特别是, Excel-DNA在pxTypeText
参数末尾添加一个“#” 。
该文件说:
在最后一个参数代码后放置#字符,
pxTypeText
可使该函数具有与宏工作表上的函数相同的调用权限。这些如下:
该函数可以检索在此重新计算循环中尚未计算的单元格的值。
该函数可以调用任何XLM信息(第2类)函数,例如
xlfGetCell
。
如果数字符号(#)不存在:
评估未计算的像元会导致
xlretUncalced
错误,并且一旦计算出像元,就会再次调用当前函数;调用任何XLM信息函数而不是
xlfCaller
导致xlretInvXlfn
错误。
将功能标记为的一些缺点IsMacroType=true
:
它们不能是多线程的-即使注册为,Excel-DNA也不会在注册时添加“ $”后缀IsThreadSafe=true
。
如果它们包含至少一个object
标记为类型的参数,[ExcelArgument(AllowReference=true)]
则Excel会自动将该函数视为易失性的(即使该函数被显式标记为IsVolatile=false
。)
此外,据我了解,在Excel计算过程中,依赖处理中对此类函数的处理方式有所不同。因此,您可能希望对工作表的计算顺序进行一些更改。我对此没有参考或复制。
我的建议是仅IsMacroType=true
在例外情况下进行设置,当您知道确实需要这样做并且准备调查可能出现的任何问题时。