轉載自我的主頁git
翻譯開源項目ExcelDNA開發文檔github
ExcelDNA支持兩種異步函數:安全
兩種方式的不一樣之處多線程
RTD的使用方法之一是:ExcelAsyncUtil.Run。爲了方便執行,ExcelDNA在內部定義了RTD服務(詳情)RTD服務容許ExcelDNA通知Excel,例如:在異步任務完成以後,該公式是否須要從新計算。異步
異步函數以下:函數
Name
Description
Category
HelpTopic
IsVolatile
(!
suffix)IsHidden
IsExceptionSafe
IsMacroType
(#
suffix)IsThreadSafe
($
suffix)IsClusterSafe
(&
suffix)ExplicitRegistration
SuppressOverwriteError
是否使用宏類型
當IsMacroType=true時,ExcelDNA註冊該函數,會調用xlfRegister
Excel API Reference for xlfRegister
。詳細說,若是IsMacroType=true,ExcelDNA會在pxTypeText後加"#"
相關文檔中如此描述ui
在pxTypeText最後一個參數加#,給函數相同的調用許可證,做爲一個宏中的函數插件
- 函數會獲取在從新計算的循環中,還沒有計算的單元格的值
- 這個函數能夠調用任一xlm信息中的函數,例如:xlfGetCell
若是並無出現#符號線程
- 求並無計算的單元格的結果,會出現xlretUncalced 錯誤。一旦單元格被計算,當前函數會被再次調用
- 調用xlm中除xlfCaller之外的函數,會引起xlretInvXlfn錯誤
使用IsMacroType=true的一些弊端翻譯
進一步看,我理解的是,在Excel計算期間,這些函數處理不一樣的線程,所以,你可能期待在工做薄計算時,會有一些變化,我並無引用也沒有重寫它。
我建議值在乎料以外的案例中只設置IsMacroType=true,當你肯定須要而且已經足夠了解時,你能夠升級
是否線程安全,設置爲true時,意味着你的函數安全的多線程從新計算,若是在註冊字符串最後加上"$"符號,能夠在內部調用xlfRegister
是否集羣安全,設置爲true時,意味着你的函數在集羣時安全
Cluster safe functions
是否異常安全,設置爲true時,意味着不管什麼時候出現未知的異常時,Excel應該崩潰,該參數最好忽略
Name
Description
AllowReference
Name
Description
(Unused)HelpTopic
(Unused)ShortCut
MenuName
MenuText
IsExceptionSafe
ExplicitRegistration
SuppressOverwriteError
默認狀況下,ExcelDNA全部的函數註冊方法必須是 public static
,爲的是能在.dna文件中訪問到,下面有兩個屬性,你能夠放在.dna文件中便於控制你的註冊。
ExplicitExports='true'
<ExternalLibrary Path="MyFunctions.dll" Pack="true" ExplicitExports="true" />
若是你的AddIn明確的註冊(若是你要註冊一個擴展類庫),你能夠在.dna文件中增長ExplicitRegisration='true'
,在ExcelDNA中,並不會自動註冊任一個函數,而且你的AddIn可使用ExcelIntegration.RegisterDelegates(...)
被調用,
ExplicitRegistration
選項運行容許明確的方法或者類庫退出默認的註冊處理,例如,方法或者類庫有explicitly register
,則調用ExcelIntegration.RegisterXXX
方法中的其中一個
ExcelFunctionAttribute
和ExcelCommandAttribute
均有效Project
和ExternalLibrary
中有效ExcelIntegration.RegisterMethods
或者ExcelIntegration.RegisterDelegates
被調用時,這些標誌會在任一屬性被調用以前刪除ExcelDNA自定義外部類庫,能夠經過自定義方法與註冊線程,動態註冊函數,此處使用了委託,ExcelIntegration.RegisterDelegates
。詳情
如下是函數的參數以及返回值的類型
傳入函數的參數類型,只容許傳入如下的參數:
參數類型爲 Object[] 、 Object[,] 的函數將接受上述類型,返回類型以下:
當ExcelDna.AddInNuGet包被安裝在項目中,一些附加的編譯配置已經被定義好,此時,只須要Copy所需的.xll文件到輸出目錄,便可以建立一個用於插件的單獨的包。
安裝包會增長文件到項目中(Properties\ExcelDna.Build.props)。這個文件被用於自定義須要哪些附件。ExcelDna.Build.props容許配置一下內容
<!-- Configuration properties for building .dna files --> <PropertyGroup> <!-- Enable/Disable automatic generation of platform-specific versions of .dna files --> <ExcelDnaCreate32BitAddIn Condition="'$(ExcelDnaCreate32BitAddIn)' == ''">true</ExcelDnaCreate32BitAddIn> <ExcelDnaCreate64BitAddIn Condition="'$(ExcelDnaCreate64BitAddIn)' == ''">true</ExcelDnaCreate64BitAddIn> <!-- Define the suffix used for each platform-specific file e.g. MyAddIn64.dna --> <ExcelDna32BitAddInSuffix Condition="'$(ExcelDna32BitAddInSuffix)' == ''"></ExcelDna32BitAddInSuffix> <ExcelDna64BitAddInSuffix Condition="'$(ExcelDna64BitAddInSuffix)' == ''">64</ExcelDna64BitAddInSuffix> </PropertyGroup> <!-- Configuration properties for packing .dna files --> <PropertyGroup> <!-- Enable/Disable packing of .dna files --> <RunExcelDnaPack Condition="'$(RunExcelDnaPack)' == ''">true</RunExcelDnaPack> <!-- Suffix used for packed .xll files e.g. MyAddIn-packed.xll --> <ExcelDnaPackXllSuffix Condition="'$(ExcelDnaPackXllSuffix)' == ''">-packed</ExcelDnaPackXllSuffix> </PropertyGroup>