.NET实现Office Excel自定义公式 广泛应用于报表与数据分析
在管理软件开发的功能点中,有相当一部分功能是与Excel做数据交互,产生Excel 数据报表。如果Excel报表的数据计算方法很有规律可循,则可以通过自定义公式来解决。比如常见的资产负债表,利润表,取数都非常有规律。
Excel DNA是一套用.NET框架实现的Excel自定义公式引擎,互联网上有很多Excel财务方面的报表是基于此技术实现。Excel DNA完全开放源代码,可到网上下载它的完整源代码和例子工程,地址是https://exceldna.codeplex.com
开发自定义公式
1 创建用户自定义公式(Visual Basic)
用记事本创建一个Test.dna的文本文件,参考下面的代码例子,实现一个简单的加法公式。
<DnaLibrary><![CDATA[Public Module MyFunctionsFunction AddThem(x, y)AddThem = x + yEnd FunctionEnd Module]]></DnaLibrary>
打开Excel,输入公式=AddThem(4,2),可以看到Excel计算后的公式结果是6。
2 创建自定义公式(C#)
创建一个Test.dna的文本文件,参考如下所示的例子代码,实现字符串与双精度类型数值相加的公式。
<DnaLibrary Language="CS"><![CDATA[using ExcelDna.Integration;public class MyFunctions{[ExcelFunction(Description="Joins a string to a number", Category="My functions")]public static string JoinThem(string str, double val){return str + val;}}]]></DnaLibrary>
可以打开Excel,输入公式=JoinThem(“James”,1983),可看到实际的运算结果。
3 通过.NET程序集创建自定义公式
Visual Basic,C#都是.NET的一等公民,用自己熟悉的语言创建一个Class Library类库项目TestLib,参考如下的代码例子,实现两个双精度数值相加的公式。
using ExcelDna.Integration;public class MyFunctions{[ExcelFunction(Description="Multiplies two numbers", Category="Useful functions")]public static double MultiplyThem(double x, double y){return x * y;}}
再来创建一个Test.dna的文本文件,添加如下的文本片段,用于声明前面创建的公式。
<DnaLibrary><ExternalLibrary Path="TestLib.dll" /></DnaLibrary>打开Excel,输入公式=MultiplyThem(2,3) 或=MultiplyThem(2; 3),看到计算结果是5。
如果.NET程序集编译成.NET 4.0,则需要稍微修改一下Test.dna的文本内容,参考下面的例子。
<DnaLibrary RuntimeVersion="v4.0" ><ExternalLibrary Path="TestLib.dll" /></DnaLibrary>
部署 Deployment
拷贝一份文件ExcelDna.xll到需要的目录中,重命名为需要的名字,比如上面的Test.xll,将上面的Test.dna文件也放到同一个文件中。双击xll文件会打开Excel程序,
提示安全声明,选为本会话启用此加载项。

然后就可以使用自定义的公式,打开或新建一个Excel文件,输入公式,回车后执行公式。

TestClassLibrary程序集中自定义公式的方法的源代码。要编译必须引用程序集ExcelDna.Integration.dll。
[ExcelFunction(Description="My first Excel-DNA function")]public static string MyFirstFunction(string name){return ("Hello " + name);}
Test.dna文件的内容如下,只是简单的声明上面的程序集中的方法。
<DnaLibrary Name="First Add-In" RuntimeVersion="v4.0"><ExternalLibrary Path="TestClassLibrary.dll" /></DnaLibrary>
打包 Packing
注意在部署时,必须同时存在dna文件和xll文件,而且这两个文件的名字要完全相同。Excel DNA支持将这两个文件合并打包在一个文件中。
运行程序ExcelDna\Distribution\ExcelDnaPack.exe,并传入参数Test.dna。如下的命令所示例的:
ExcelDnaPack.exe, Test.dna
执行完成之后,会生成一个Test-packed.xll文件,这个文件可以拷贝到其它电脑中直接执行。Test-packed.xll中已经包含Test.dna和TestLibrary.dll文件,运行时会主动被加载。
抛开复杂的Visual Studio Tools for Office, 凭借这几天简单的例子,我想读者应该可以快速的上手,高效率的创作Excel中的自定义公式。
界面(Ribbon,Panel)与COM服务器支持
Excel DNA支持创建一个自定义的面板,添加一个WinForms自定义控件,继承于System.Windows.Forms.UserControl,再添加下面的码调用即可。
CustomTaskPane myCTP = CustomTaskPaneFactory.CreateCustomTaskPane(typeof(MyUserControl), myTitle
更多内容可参考下载的源代码包,有详细的例子和说明文档。
.NET实现Office Excel自定义公式 广泛应用于报表与数据分析的更多相关文章
- Excel自定义公式,类似VLOOKUP的查询
Excel在使用VLOOKUP时,当检索值超过255长度的时候就会报错,没法正常检索. 官方提供的办法是通过INDEX和MATCH公式组合使用来解决. 微软官方方案 1,公式 =INDEX($A$5: ...
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
- vba,自定义公式,农历互转公历,excel ,wps
'vba 模块内容如下 自定义公式 '公历转农历模块 '原创:互联网 '修正: '// 农历数据定义 // '先以 H2B 函数还原成长度为 18 的字符串,其定义如下: '前12个字节代表1-12月 ...
- 浅谈Excel开发:四 Excel 自定义函数
我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比如我想要一个函数能够从WebService上获取某只 ...
- Excel 自定义函数
浅谈Excel开发:四 Excel 自定义函数 我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比 ...
- 办公软件-Excel:Microsoft Office Excel 2003百科
ylbtech-办公软件-Excel:Microsoft Office Excel 2003百科 Microsoft® Office Excel 2003 是一种电子表格程序,可提供对于 XML 的支 ...
- Microsoft Office Excel 不能访问文件及COM无法访问
Microsoft Office Excel 不能访问文件及COM无法访问 Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有: 1 文件名称或路径不存在. 2 ...
- [Excel操作]Microsoft Office Excel 不能访问文件
最近,客户服务器迁移,因操作系统环境变化而引起的的环境问题一堆,遇到的问题并解决方法在“[Excel]操作”类别会体现. Microsoft Office Excel 不能访问文件“C:\\LMSEx ...
随机推荐
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- How to create Web Deployment Package and install the package
Create Web Deployment Package To configure settings on the Connection tab In the Publish method drop ...
- 基于VC的ACM音频编程接口压缩Wave音频(二)
(二)获取CODECs 的 信 息 ACM 的API 函 数 定 义 在 头 文 件msacm.h 中, 除 此 之 外, 对ACM 编 程 还 必 须 包 含 头 文 件mmsystem.h,mm ...
- DOM技术实现竞赛题页面
DOM技术实现竞赛题页面 这一段时间学习了DOM操作和JS开发,我就自己开发一个竞赛题的页面. 一.业务需求 1.目标:做一个一百道选择题的页面 2.功能: 显示题目和选项. 下一题上一题的按钮,到第 ...
- FreeRTOS和Ucos在打开关闭中断的区别
- [ASE]sprint2 总结 & sprint3计划
第二个sprint半圆满的结束了, 经历了四周之后我们将整个的框架搭建好,并且能够正常的游戏对战,破坏场景,聊天…… 但是正如老师所述,缺乏亮点. 不过大家都是第一次做,完全把他当成一个工程来一点一点 ...
- Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- 跨平台开源通讯组件elastic communication
elastic communication是基于c#开发支持.net和mono的通讯组件(简称EC),EC的主要目的简化mono和.net下的通讯开发难度,通过EC可以非常快速地开发基于mono和.n ...
- openSUSE 11 上的配置可以Xmanager远程桌面
openSUSE 11 上的配置(适用于默认图形环境为KDE的Linux): 1.配置KDM. openSUSE 11的默认图形环境为KDE,虽然可以同时安装GDM和KDM,但默认只启动了KDM.所以 ...
- 高性能网站架构设计之缓存篇(1)- Redis的安装与使用
一.什么 Redis REmote DIctionary Server,简称 Redis,是一个类似于Memcached的Key-Value存储系统.相比Memcached,它支持更丰富的数据结构,包 ...