zoukankan      html  css  js  c++  java
  • ExcelDna项目完整工程演示及讲解

    原始链接:http://www.cnblogs.com/Charltsing/p/ExcelDnaDemo.html

     

    ExcelDna工程演示讲课内容

    1、ExcelDna是啥?
    2、ExcelDna项目的价值
    3、什么应用场景需要ExcelDna
    4、ExcelDna支持哪些功能
    5、ExcelDnaProjectDemo代码讲解

    1、 ExcelDna是啥?

    先说第一个问题,微软给Excel开发提供了两个接口:一个是常见的Com接口,一个是C API接口。

    com接口今天就不讲了,因为大家都会。

    C API接口很多人不太清楚,可以在msdn上查找资料。

    C API因以下原因而得名:Excel 使用一些标准的 C 数据类型来交换数据;库函数用 C 名称修饰;数据结构为 ANSI C。在具备了适当经验的情况下,使用 C++ 可增强 XLL 项目的易管理性、可读性和稳定性。

    因为众所周知,Com接口的执行效率很低。所以,对于一些要求高性能的项目来说,选择C API接口就成了唯一的选择。

    微软提供了xll格式的addins,使用C API来操作excel。但是,因为xll只能用C++来开发,使用.net的菜鸟们看着非常羡慕嫉妒恨。所以,很多shim就应运而生,shim意思是给xll提供一个中间垫片,使其能够加载.net写的dll。ExcelDna就是诸多shim中最好的一个。所以,我来回答第一个问题:ExcelDna是确保xll能够加载.net库的一个loader。这么解释不太严谨,但方便各位理解。

     

    2、ExcelDna项目的价值

    下面说第二个问题:ExcelDna的价值是什么?
    最主要的是几个方面:

    1. 让.net能够开发xll,从而可以调用C API。这使得程序开发的便捷性和高效性得到了完整的统一。
    2. ExcelDna封装了很多Excel提供的各种功能,这样菜鸟们可以更关注功能的实现而不是技术问题
    3. 最关键的,xll可以不使用管理员权限即可分发和部署,这是COM插件无法做到。ExcelDna的pack功能,使得插件的分发和部署变得极为容易,打包后的xll插件可以单文件下发,也能实现随意升级。
    4. 当然,ExcelDna开发出来的xll也不是没有缺点,但是和优点比起来,我还是非常赞成个人开发者使用这个项目开发Excel插件产品的。

    ExcelDna的缺点:

    目前存在一点bug,某些功能下如果执行了卸载xll的操作,会导致Excel崩溃,此问题暂时没法解决。

     

    3、什么应用场景需要ExcelDna

    关于ExcelDna的应用场景,我觉得几个词就可以概括:部署方便、高效执行、迅捷开发。所以,我还是推荐个人开发者搞一搞xll体会一下的。

     

    4、ExcelDna支持哪些功能

    关于ExcelDna支持哪些功能,其实大家看看ExcelDna的sample就知道了。


    5、ExcelDnaProjectDemo代码讲解

     

    Ribbon

     

    加载ribbon,因为2007的ribbon和2010以后的不同,所以xml需要分别定义。具体百度。

    如果需要调用com接口,使用ExcelDnaUtil.Application这个玩意,在我给的demo里面没写,因为com调用很简单,就不做demo了。

    当然,如果谁有兴趣,仔细看看ExcelDnaUtil.Application的代码,你会知道在插件里面获取Excel的application对象是一件多么复杂的事情。完全不像菜鸟们写的一句getobject之类那么简单。

    自定义函数(UDF):

     

    这个图片是自定义函数的写法,也就是UDF,其中用到的attribute很多,划红线的需要注意。

     

    需要说明的是:如果一个函数定义成public static,那么它就会被exceldna自动定义成excel的自定义函数,你可以在插入函数里面找到它。

     

    注意demo里面返回值的写法,excel支持的若干种返回值都在exceldna里面定义了,可以自己修改。

     

    加载项菜单:

     

    这个是加载项菜单的写法, 特别注意,ExcelDna给了一个默认的runTagMacro的功能,此功能可以在点击ribbon菜单的时候,执行vba或者加载项菜单的命令。

     

    需要说明的是,demo里面很多代码其实使用的是C API接口,而在这个接口里面,传参是个特别需要注意的问题。

    传递的是value还是reference,会影响后面的操作。

     

    具体请各位自行研究,等你碰上这个问题了,自然就知道去百度解决了。

     

    任务窗格:

     

    这个是任务窗格,代码很简单。

     

    CTP(任务窗格)是通过ExcelDna的CustomTaskPaneFactor. CreateCustomTaskPaney加载自定义的UserControl来实现自定义窗格的。

     

    其它一些没有讲到的功能:

    1、RTD:ExcelDna可以轻松实现此功能而无需借助RTD公式

    2、创建Com server

    3、ExcelAsyncUtil功能。

    4、异步函数AsyncFunctions

    5、Xll自动升级

     

    几个接口:

     

    最后说一下几个接口,原则上如果你想在xll启动和关闭的时候做什么事情,使用ExcelDna提供的这两个接口就行了。至于为什么不提供其它接口,等你用上了就知道别的都没啥用了。

     

    这个是平时开发com addins用到的com接口

    在xll开发中,尽量不要用它

    原因你们用了就知道

    最后,我说一下工程编译的注意事项

    因为,我们最后要的是xll,不是dll,所以在编译完成之后,需要pack一下,这个可以通过bat执行

     

    ExcelDna生成的xll需要四个文件才能运行:

    1、ExcelDna.Integration.dll

    2、你的dna文件,里面按照规定格式写好需要打包的dll文件

    3、和dna文件同名的xll loader(就是ExcelDna默认提供的xll文件,改成和dna文件同名)

    4、你编译的dll

     

    然后运行ExcelDnaPack打包工具,将上面的四个文件打包成一个xll。

     

    dna文件的参考写法:

     

    关于最后这个ExplicitExports参数,我这里不讲,你们课后可以自己测试加上它和去掉它对插件的影响。

     


    调试你的代码:

     

    加上这个,然后按F5即可启动Excel,然后在Excel中open你的xll文件(打包前后的都可以)。

     

    如果要观察xll加载项的错误,请打开上面的选项

    注意:安装Visual Studio之后,打开上面的选项,启动Excel会弹出错误提示,请禁用VS安装的加载项。

     

    结束语:

    本课讲解了dna工程项目的简单构成,希望各位课后能认真看看源代码,在本代码的基础上,你可以直接开发你的xll插件,C API不会写,我们可以写COM调用嘛,虽然效率低,结果都一样,正适合只会vba的童鞋们。

     

    本课到此结束!

    课程代码下载:https://github.com/Charltsing/ExcelDnaProjectDemo

     

    6、答疑

    联系QQ 564955427

    2018.3.30

     

  • 相关阅读:
    Lucene 3.5 提供深度分页支持 searchAfter方法 方法的应用
    如何解决ORA12547错误
    sde 安装
    软件安装之arcsde10.0集群
    Linux 64bit下Oracle11g安装手册
    Lucene 3.5 提供深度分页支持 searchAfter方法 方法的应用
    Creating a Feature Set via C#
    sde 安装
    9.15
    9.18
  • 原文地址:https://www.cnblogs.com/Charltsing/p/ExcelDnaDemo.html
Copyright © 2011-2022 走看看