2015-12-03 356 views
1

如果功能的ExcelFunction屬性指定IsMacroType=true,則只有Excel-DNA才允許進入Excel的XLL API。我不清楚的是,爲什麼簡單地將它添加到我的所有功能中並且完成它並不是一個好主意;我假設它不是,否則它將是默認值。在Excel-DNA中標記函數IsMacroType有哪些優缺點?

與Excel自身的函數計算波動有關嗎?如果網上有很好的資源描述IsMacroType=true的優缺點,我很樂意看到它!

回答

3

IsMacroType=true屬性改變登記的功能,這與對xlfRegister呼叫完成時的Excel-DNA使用參數,如記錄這裏:https://msdn.microsoft.com/en-us/library/office/bb687900.aspx特別地,Excel的DNA添加一個「#」的pxTypeText的端部參數。

文檔說:

加#號的在pxTypeText 最後一個參數代碼之後給人的功能相同的調用權限功能上 宏表。這些如下:

  • 該函數可以檢索尚未在此重新計算週期中計算的單元格的值。

  • 該函數可以調用任何XLM信息(2類)函數,例如xlfGetCell

如果數字符號(#)不存在:

  • 評估在xlretUncalced錯誤未計算細胞的結果,和當前的功能是 再次調用一旦小區已經被計算;
  • 調用任何XLM 以外的信息功能xlfCaller導致xlretInvXlfn 錯誤。

標誌着一個功能IsMacroType=true的一些缺點:

  • 它們不能被多線程 - Excel的DNA不會增加註冊時的「$」後綴,即使它們被標記爲IsThreadSafe=true
  • 它們是否包含被標記[ExcelArgument(AllowReference=true)]則函數由Excel會自動認爲是揮發性object類型的至少一個參數(即使函數被明確標記爲IsVolatile=false。)

此外,我的理解是在Excel計算過程中,這些函數在依賴性處理中被區別對待。因此,您可能會預計工作表計算順序會發生一些變化。不過,我沒有參考或複製。

我的建議是隻在特殊情況下設置IsMacroType=true,當您知道它確實是必需的並且您準備調查可能出現的任何問題時。

相關問題