使用c++开发excel插件(第4章编写一个完整的xll)

 

1、认识xll

2、通过宏加载工具手动加载xll

3、创建自动加载宏xll

4xll加载过程

5、主要函数介绍

6、编写完整的xll

 

1、 认识xll

Xll是一个标准的win32 dll,但它导出了一些特殊的函数,这些函数可以被excel调用,也可以把自定义的函数注册到excel中,以扩展excel的功能。通过xll你可以在excel中添加菜单,工具按钮等等。同样你可以把你编写的xll发布给其他人共享。

如果你现在准备编写一个xll插件的话,你首先需要准备一些必备的资源,如xlcall32.dll以及它的导出库文件xlcall32.lib,函数的定义文件xlcall.h。至于如何获得这些资源,你可以参考第一章的内容。在编写xll时,你需要配置工程以使你编译器可以找到这些文件。在Visual C++6中菜单Project->settings在项目设置对话框中的Link页中加入xlcall32.lib,注意xlcall32.lib文件必须放在编译可以找到的位置,你可以把它放在项目当前目录中。

Visual studio .Net 2003中同样需要设置,你可以通过点击菜单项目—>属性,在链接器—>输入页中加入到入库。

 

1、 如何加载宏

Xll宏的加载有多种方式,一种是通过excel的加载宏管理器来加载一个可用的xll宏。另一种方式是通过在xll宏中实现自动加载函数,并把xll文件复制到安装目录下的“XLSTART”文件夹中,或放在C:/Documents and Settings/wxy/Application Data/Microsoft/AddIns目录下,当excel启动时会自动加载这两个文件夹中的xll宏。你也可以像打开文件一样通过excel的打开文件命令打开xll文件。几种方式实现的效果基本差不多,被加载的xll宏中的函数,方法等都可以在excel中调用。

通过加载宏管理器加载xll文件,你需要在excel中点击菜单工具->加载宏,在加载宏管理窗口中通过浏览按钮打开你的xll文件,此时,加载宏管理器会把xll文件注册到excel中,并把注册名列在管理器中。注册名是xll中的函数“xlAddInManagerInfo”中设定的用于标识此xll的字符串。例如下图中的“My Add-in!!!!”是我们刚刚添加的xll宏。

 

 

刚刚被加载的宏默认是被激活的。关于激活状态我们将在后面讲解。这时我们就可以在excel中调用刚刚加载的xll宏中函数和方法了。注意使用加载文件时必须是包含excel加载函数的文件,否则excel会提示为无效加载宏:

 

如果使用自动加载,你需要把xll文件放置到“C:/Documents and Settings/wxy/Application Data/Microsoft/AddIns”目录下,或者放到office的安装目录下的“XLSTART”目录中,如果没有此目录,你可以新建一个。但“XLSTART”目录的位置会因office的版本不同而不同,在office2003中它的路径是“安装目录/Microsoft Office/OFFICE11/XLSTART”。使用自动加载的xll宏并不显示在加载宏管理器中。当然它必须也是有效的加载宏。当你启动excel时,excel会自动扫描这些文件夹,并加载文件夹中所有可用的加载宏文件。

当你加载一个xll加载宏时,excel主要执行以下操作:

²        调用xlAddInManagerInfo注册加载宏的名称。

²        调用xlAutoOpen初始化xll并注册自定义函数,添加菜单、按钮等。

 

2、 激活加载宏

我们在前面看到,当一个xll加载宏第一次被宏管理器加载时,默认是选中的,这表明这个宏此时是被激活的,xll宏一旦被激活就意味着它的函数或方法可以被调用了,此时我们打开插入函数窗口(菜单插入->函数),在其中我们就可以找到我们自定义的函数类别及这个类别下的所有函数。

 

 

如果你不想要这些函数执行,那么你可以取消加载宏管理器中的对应选项,这时对应的xll宏就被取消了激活状态,excel中的所有对相关函数的引用都将不可用,虽然你取消了激活状态,但有时还会在插入函数对话框中仍然看到这个xll文件中的函数,但这并不代表函数仍然能用,因为如果你此时调用函数,excel不会让你输入任何参数。通常当你使用的函数名在不同xll加载宏中同时存在时,取消其它发生冲突的xll宏就显得非常重要了。

 

 

当你要激活一个xll加载宏,excel执行以下操作:

²        调用xlAutoOpen初始化xll并添加菜单、按钮,注册函数等。

 

1、 删除加载宏

当使用加载宏管理器加载xll宏时,excel会把xll文件的路径保存在注册表中,在excel下次启动时excel会按照这个路径寻找对应的文件,但是如果对应的动态链接库已被删除或路径发生变化,excel在启动时会提示文件找不到,但此时excel并不会删除其在excel加载宏管理器中的对应项。直到你打开加载宏管理器并改变其激活状态时才提示是否要删除未找到的项,我不是很理解excel为什么要这么设计。如果在加载宏管理器里有个删除按钮,我觉得会好用许多。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值