翻译-ExcelDNA开发文档
转载自个人主页
前言
翻译开源项目ExcelDNA开发文档
异步处理
ExcelDNA支持两种异步函数:
- RTD,该函数适用与Excel2003及以上版本,(当你使用ExcelAsyncUtil.*时,RTD起作用)
- 本地Excel异步函数,使用Excel2010及以上版本(当你的函数使用ExcelAsyncHandle作为参数并且返回值为void时)
两种方式的不同之处
- RTD函数允许你在函数执行的时候,与Excel通信
- 本地异步函数,当函数已经被执行时,Excel只允许执行工作薄的其他部分。所以在单元格计算时,你不并能影响Excel。
RTD的使用方法之一是:ExcelAsyncUtil.Run。为了方便执行,ExcelDNA在内部定义了RTD服务(详情)RTD服务允许ExcelDNA通知Excel,例如:在异步任务完成之后,该公式是否需要重新计算。
异步函数如下:
- 你定义一个异步函数在公式里
- Excel需要重新计算,调用异步函数执行ExcelAsyncUtil.Run
- 使用ExcelAsyncUtil.Run 创建RTD主题(引用方法名和在参数中信息中在让ExcelAsyncUtil.Run作为第一个参数)
- ExcelAsyncUtil.Run 使异步工作开始,并且与RTD主题保持联系
- 当持续计算时,ExcelAsyncUtil.Run会返回#N/A给UDF。
- 你的UDF会返回#N/A到Excel工作薄
- 当你工作完成时,ExcelDNA会发送标识让RTD更新
- 当RTD出现错误时,Excel会在单元格上标记
- Excel重新计算时,会让单元格重新计算,会让UDF重新被调用
- UDF调用ExcelAsyncUtil.Run和之前的主题信息一致
- ExcelAsyncUtil.Run查找在方法中存储的主题和完成的值,它会直接返回值,如果找不到会返回#N/A
- UDF函数会接收到结果值,并且将值返回给工作薄
- 由于ExcelAsyncUtil.Run不能再次调用Excel RTD方法,所以RTD主题会清空Excel内部的值
ExcelFunction 属性
NameDescriptionCategoryHelpTopicIsVolatile(!suffix)IsHiddenIsExceptionSafeIsMacroType(#suffix)IsThreadSafe($suffix)IsClusterSafe(&suffix)ExplicitRegistrationSuppressOverwriteError
IsMacroType
是否使用宏类型
当IsMacroType=true时,ExcelDNA注册该函数,会调用xlfRegister
Excel API Reference for xlfRegister。详细说,如果IsMacroType=true,ExcelDNA会在pxTypeText后加"#"
相关文档中如此描述
在pxTypeText最后一个参数加#,给函数相同的调用许可证,作为一个宏中的函数
- 函数会获取在重新计算的循环中,尚未计算的单元格的值
- 这个函数可以调用任一xlm信息中的函数,例如:xlfGetCell
如果并没有出现#符号
- 求并没有计算的单元格的结果,会出现xlretUncalced 错误。一旦单元格被计算,当前函数会被再次调用
- 调用xlm中除xlfCaller以外的函数,会引发xlretInvXlfn错误
使用IsMacroType=true的一些弊端
- 如果不加"$"后缀,不能使用多线程,即使被标记了IsThreadSafe=true
- 如果他们包含至少一种参数,标记[ExcelArgument(AllowReference=true)]的类型参数,则Excel自动将函数视为不稳定性(即使函数被标记IsVolatile=false)
进一步看,我理解的是,在Excel计算期间,这些函数处理不同的线程,因此,你可能期待在工作薄计算时,会有一些变化,我并没有引用也没有重写它。
我建议值在意料之外的案例中只设置IsMacroType=true,当你确定需要并且已经足够了解时,你可以升级
IsThreadSafe
是否线程安全,设置为true时,意味着你的函数安全的多线程重新计算,如果在注册字符串最后加上"$"符号,可以在内部调用xlfRegister
IsClusterSafe
是否集群安全,设置为true时,意味着你的函数在集群时安全
Cluster safe functions
IsExceptionSafe
是否异常安全,设置为true时,意味着无论何时出现未知的异常时,Excel应该崩溃,该参数最好忽略
ExcelArgumentAttribute
NameDescriptionAllowReference
ExcelCommandAttribute
NameDescription(Unused)HelpTopic(Unused)ShortCutMenuNameMenuTextIsExceptionSafeExplicitRegistrationSuppressOverwriteError
函数注册
默认注册
默认情况下,ExcelDNA所有的函数注册方法必须是 public static,为的是能在.dna文件中访问到,下面有两个属性,你可以放在.dna文件中便于控制你的注册。
ExplicitExports
- 如果你仅仅想注册一个方法并且明确的标志他是一个Excel方法或者Excel命令,你可以在.dna文件中假如
ExplicitExports='true'
例如:
<ExternalLibrary Path="MyFunctions.dll" Pack="true" ExplicitExports="true" />
- 这些属性在.dna文件中的项目与类库中的标记中是有效的
显式注册选项
如果你的AddIn明确的注册(如果你要注册一个扩展类库),你可以在.dna文件中增加ExplicitRegisration='true',在ExcelDNA中,并不会自动注册任一个函数,并且你的AddIn可以使用ExcelIntegration.RegisterDelegates(...)被调用,
ExplicitRegistration选项运行允许明确的方法或者类库退出默认的注册处理,例如,方法或者类库有explicitly register,则调用ExcelIntegration.RegisterXXX 方法中的其中一个
- 在
ExcelFunctionAttribute和ExcelCommandAttribute均有效 - 在.dna文件中的
Project和ExternalLibrary中有效 - 当
ExcelIntegration.RegisterMethods或者ExcelIntegration.RegisterDelegates被调用时,这些标志会在任一属性被调用之前删除
动态注册
ExcelDNA自定义外部类库,可以通过自定义方法与注册线程,动态注册函数,此处使用了委托,ExcelIntegration.RegisterDelegates。详情
数据类型
以下是函数的参数以及返回值的类型
- Double
- String
- DateTime -- 返回double类型到Excel (或许直接返回字符串会更好)
- Double[] -- 如果只有一列,则取该列,否则将会使用该行
- Double[,]
- Object
- Object[] -- 如果只有一列,则取该列,否则将会使用该行
- Object[,]
- Boolean (bool) -- 返回Excel布尔值 (返回一个字符串会更好)
- Int32 (int)
- Int16 (short)
- UInt16 (ushort)
- Decimal
传入函数的参数类型,只允许传入以下的参数:
- Double
- String
- Boolean
- ExcelDna.Integration.ExcelError
- ExcelDna.Integration.ExcelMissing
- ExcelDna.Integration.ExcelEmpty
- Object[,] containing an array with a mixture of the above types
- ExcelReference -- (只有 AllowReference=true 时)
参数类型为 Object[] 、 Object[,] 的函数将接受上述类型,返回类型如下:
- Double
- String
- DateTime
- Boolean
- Double[]
- Double[,]
- Object[]
- Object[,]
- ExcelDna.Integration.ExcelError
- ExcelDna.Integration.ExcelMissing.Value // Converted by Excel to be 0.0
- ExcelDna.Integration.ExcelEmpty.Value // Converted by Excel to be 0.0
- Int32 (int)
- Int16 (short)
- UInt16 (ushort)
- Decimal
- otherwise return #VALUE! error
自定义编译输出
当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>
相关链接
翻译-ExcelDNA开发文档的更多相关文章
- 翻译-ExcelDNA开发文档-首页
转载自个人主页 前言 ExcelDNA是一名国际友人开发的开源框架,文档全是英文文档,当时看的时候非常吃力,现在将英文文档翻译过来,为的是让自己加深印象以及自己以后看的时候能不用这么吃力. 介绍 Ex ...
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- 【原创】Odoo开发文档学习之:ORM API接口(ORM API)(边Google翻译边学习)
官方ORM API开发文档:https://www.odoo.com/documentation/10.0/reference/orm.html Recordsets(记录集) New in vers ...
- 【原创】Odoo开发文档学习之:构建接口扩展(Building Interface Extensions)(边Google翻译边学习)
构建接口扩展(Building Interface Extensions) 本指南是关于为Odoo的web客户创建模块. 要创建有Odoo的网站,请参见建立网站;要添加业务功能或扩展Odoo的现有业务 ...
- Android官方开发文档Training系列课程中文版:目录
Android官方开发文档Training系列课程中文版:目录 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻译成英文,供国内的开发者使用,尤其是入门开 ...
- iOS - 苹果官方Apple Pay开发文档(中文版)- Apple Pay(1)
翻译自苹果官方Apple Pay开发文档.目前版本为1.0 概览: Apple Pay为用户从你的App里购买实际的物品和服务提供简单而安全的方法.通过Touch ID,用户可使用储存在iPhone ...
- Net通用进销存管理系统 + 开发文档+ 使用说明
通用进销存管理系统 + 开发文档+ 使用说明Net源码下载 包括下面的模块基础资料模块采购管理模块库存管理模块商务管理模块营业管理模块维修管理模块会员管理模块财务管理模块 Net通用进销存管理系统 + ...
- C#微信开发文档
C#微信开发文档 开发前准备 微信公众平台链接: https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN 开发初期我们使用测 ...
- 在线API,桌面版,jquery,css,Android中文开发文档,JScript,SQL掌用实例
学习帮助文档大全 jquery,css,Android中文开发文档,JScript,SQL掌用实例 http://api.jq-school.com/
随机推荐
- 【STL基础】vector
vector 构造函数: //default: vector<T> v; //空的vector //fill: vector<T> v(n); //n个元素的vector,元素 ...
- Unity 移动 和 旋转 [小结]
[移动] Position: 说明: 直接修改位置数据 Translate: 说明: [匀速]朝着一个方向,一直移动. (dir * speed 可以控制速度)适合键盘控制物体上下左右运动 函数: ...
- 查看php 相关信息
PHP系统常量 __FILE__ 当前PHP程序脚本的绝对路径及文件名称 __LINE__ 存储该常量所在的行号 __FUNCTION__ 存储该常量所在的函数名称 __CLASS__ 存储该常量所在 ...
- wireshark开发环境搭建
自己完成了wireshark开发环境的搭建,主要参考资料是wireshark的官方developer-guide.pdf,网址:https://www.wireshark.org/docs/. 现把搭 ...
- Java对象排序两种方法
转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...
- 傻瓜式Spring教学第一课
首先,把Spring需要的五个包导入项目: commons-logging-1.2.jar spring-beans-4.3.4.RELEASE.jar spring-context-4.3.4.RE ...
- NMS_非极大值抑制(转)
NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边缘检测.目标检测等. 这里主要以人脸检测中的应用为例,来说明NMS,并给出Mat ...
- AndroidStudio打包jar
1.像平常一个样新建一个项目 2.(在步骤1的基础上)点击File-->New-->New Module—>选择Android Library-->点击Next(如下图:) 定 ...
- 转:Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「网络请求哪家强」
转载自https://zhuanlan.zhihu.com/p/21879931 1. 原则 本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软 ...
- Murano Service Architecture Introducation
1. Murano Project Mission From the third-party tool developer’s perspective, the application catalog ...