转载自我的主页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>