在管理软件开发的功能点中,有相当一部分功能是与Excel做数据交互,产生Excel 数据报表。如果Excel报表的数据计算方法很有规律可循,则可以通过自定义公式来解决。比如常见的资产负债表,利润表,取数都非常有规律。

Excel DNA是一套用.NET框架实现的Excel自定义公式引擎,互联网上有很多Excel财务方面的报表是基于此技术实现。Excel DNA完全开放源代码,可到网上下载它的完整源代码和例子工程,地址是https://exceldna.codeplex.com 

 

开发自定义公式

1 创建用户自定义公式(Visual Basic)

用记事本创建一个Test.dna的文本文件,参考下面的代码例子,实现一个简单的加法公式。

  <DnaLibrary>
    <![CDATA[
        Public Module MyFunctions

            Function AddThem(x, y)
                AddThem = x + y
            End Function

        End 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自定义公式 广泛应用于报表与数据分析的更多相关文章

  1. Excel自定义公式,类似VLOOKUP的查询

    Excel在使用VLOOKUP时,当检索值超过255长度的时候就会报错,没法正常检索. 官方提供的办法是通过INDEX和MATCH公式组合使用来解决. 微软官方方案 1,公式 =INDEX($A$5: ...

  2. VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

    原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...

  3. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  4. vba,自定义公式,农历互转公历,excel ,wps

    'vba 模块内容如下 自定义公式 '公历转农历模块 '原创:互联网 '修正: '// 农历数据定义 // '先以 H2B 函数还原成长度为 18 的字符串,其定义如下: '前12个字节代表1-12月 ...

  5. 浅谈Excel开发:四 Excel 自定义函数

    我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比如我想要一个函数能够从WebService上获取某只 ...

  6. Excel 自定义函数

    浅谈Excel开发:四 Excel 自定义函数   我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比 ...

  7. 办公软件-Excel:Microsoft Office Excel 2003百科

    ylbtech-办公软件-Excel:Microsoft Office Excel 2003百科 Microsoft® Office Excel 2003 是一种电子表格程序,可提供对于 XML 的支 ...

  8. Microsoft Office Excel 不能访问文件及COM无法访问

    Microsoft Office Excel 不能访问文件及COM无法访问 Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有: 1 文件名称或路径不存在. 2  ...

  9. [Excel操作]Microsoft Office Excel 不能访问文件

    最近,客户服务器迁移,因操作系统环境变化而引起的的环境问题一堆,遇到的问题并解决方法在“[Excel]操作”类别会体现. Microsoft Office Excel 不能访问文件“C:\\LMSEx ...

随机推荐

  1. storm入门(二):关于storm中某一段时间内topN的计算入门

    刚刚接触storm 对于滑动窗口的topN复杂模型有一些不理解,通过阅读其他的博客发现有两篇关于topN的非滑动窗口的介绍.然后转载过来. 下面是第一种: Storm的另一种常见模式是对流式数据进行所 ...

  2. android studio打包出现翻译问题

    错误信息: Error:(16) Error: "baidutieba_client_inavailable" is not translated in "en" ...

  3. css长度值与颜色值

    颜色值 在网页中的颜色设置是非常重要的,有字体颜色,背景颜色,边框颜色等,设置颜色的方法也有很多种: 1.英文命令颜色 p{color:red;} 2.rgb颜色 p{color:rgb(133,45 ...

  4. JavaScript 笔记

    function (函数)document(文档 get获得文档中..) <script type="text/javascript"> function yz(){ ...

  5. 升级ruby后再安装cocodPod

    1.移除现有的Ruby $gem sources --remove https://rubygems.org/ 2.使用淘宝镜像 $gem sources -a https://ruby.taobao ...

  6. php+redis window

    http://download.csdn.net/detail/qwfy326/6572443 wampserver2.2e-php5.3.13-httpd2.2.22-mysql5.5.24-x64

  7. Jexus V5.8.2 正式发布,强劲的高性能 web 服务器

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布. 有如下更新: 1,新增 ...

  8. Fedora23Server配置

    系统准备 启动网卡: sudo service network start 更新系统: sudo dnf update 远程管理: https://IP:9090/ Dnf使用: http://www ...

  9. 细心很重要---猜猜这个SQL执行的什么意思

    今天在帮客户做语句优化的时候,突然遇到这样一个语句,类似下面的例子(原语句是个update) 例子中使用AdventureWorks数据中的两个表. productID 是[Production].[ ...

  10. 那些年使用Hive踩过的坑

    1.概述 这个标题也是用血的教训换来的,希望对刚进入hive圈的童鞋和正在hive圈爬坑的童鞋有所帮助.打算分以下几个部分去描述: Hive的结构 Hive的基本操作 Hive Select Hive ...