在Excel-DNA中标记函数IsMacroType有哪些优点/缺点?

时间:2015-12-03 04:51:25

标签: excel-dna

如果函数的ExcelFunction属性指定IsMacroType=true,则Excel-DNA仅允许对Excel的XLL API进行大量调用。我不清楚的原因是为什么简单地将它添加到我的所有功能中并完成它并不是一个好主意;我假设它不是默认值。

与Excel本身的函数计算的波动性有什么关系?如果网上有一个很好的资源来描述IsMacroType=true的利弊,我很乐意看到它!

1 个答案:

答案 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的一些缺点:

  • 它们不能是多线程的 - Excel-DNA在注册时不会添加“$”后缀,即使它们被标记为IsThreadSafe=true
  • 如果它们至少包含一个标记为object的{​​{1}}类型的参数,那么Excel会自动将该函数视为易失性(即使该函数明确标记为[ExcelArgument(AllowReference=true)]。 )

此外,我的理解是这些函数在Excel计算期间的依赖性处理中被区别对待。因此,您可能希望对工作表计算的顺序进行一些更改。不过,我没有参考或复制。

我建议仅在特殊情况下设置IsVolatile=false,当您知道肯定需要时,并且您准备调查可能出现的任何问题。