VC之Office自动化开发(一)

去年底老板临时交给一个任务,为一个试验数据管理系统编写一个电子报告生成程序。因为老板也不怎么重视这个项目(钱少啊,呵呵),所以这个任务只好落在我这种小硕身上了。我也是两眼瞎,万事从头干。三个月的苦斗,还算圆满交差。用VC进行office自动化开发,网上有很多文章,我本不想在此画蛇添足。只是感于自己查资料时的苦痛,所以就厚着脸皮把一些心得拿出来见见阳光,有一些技术还是自己摸索出来的。最后,office自动化开发与我专业无丁点关系,希望此文不至于太班门弄斧让你看得难堪,如果尚有所帮助,那真是不胜荣幸(本文只涉及如何解决问题,没有原理,所以,Don’t ask me why)

1 前话  

本文中,只讲述如何使用VC++(就是MFC)进行WORD、EXCEL自动化开发。有几个问题先交待于此。
(1) office开发之VC与VB实现之比较。事实上,MFC实在不适合进行office自动化开发。相对VB而言,C++是一种强调类型的语言,这使得在实际编程时通常搞得你非常烦躁,不停地返回一些毫无意义的对象或指针(鸡肋啊!),而且整个程序会显得非常冗长。VB这种属性化的编程语言则非常适于自动化开发。
(2)office版本。在你提交帮助文档的时候,一定要说明你是针对哪个office版本开发的,否则不同的office版本可能会导致程序无法正常运行,因为不同版本的office提供的接口函数可能是不同的(特别是使用VC开发这个问题就比较明显,不知VB是否有同样的问题)。本文中所述的是office20003版本。
(3)两个重要的学习来源。初学office开发,两个不可忽视的学习来源是:word本身的VBA宏代码和微软官方网站。录制的VBA宏代码可以给我们提供非常有用的思路,而且通过调试可以获得很多所需的参数值(因为MFC通常并不支持很多VBA宏)。微软官方网提供了许多非常实用的技术文献(本文涉及的一些技术就来自于MSDN),如果英文基础还可以的话,建议到英文MSDN上去看看,那里的资料要比中国MSDN多。
(4)由于所有权的一些问题,所以不能提供源代码,也许会给阅读带来一些不便,这点希望谅解(而且那代码确实太臭,被我们的大师兄客气地批评得体无完肤,也就不敢拿出来献丑了)

2 自动化技术简述   

自动化(以前称为 OLE 自动化)是一种允许您利用现有程序的功能并将其合并到您自己的应用程序中的技术。自动化是建立在组件对象模型 (COM) 的基础上。IDipatch是自动化技术的核心。
VARIANT是另一个重要的概念。VARIANT结构是一个通用的数据类型,IDipatch利用它来传递参数和返回值。MFC小组创建了一个COleVariant类将VARIANT结构包装起来,并被很好地用于自动化客户和组件。需要注意的是COleVariant通常只支持short, long,float等数字类型,不支持int类型,使用时请注意强制转换。关于COleVariant类的更多信息可以参看MSDN。
关于COM技术和自动化技术更多信息请参看一些公开出版的书籍及微软官方网站资料。
另外提前交待的是:
(1)在进行自动化开发前,必须首先初始化COM库。通常一种便利的方法是在应用程序类的InitInstance()函数里添加以下语句:

if(!AfxOleInit())
     {
     AfxMessageBox("OLE Initialization Failed");
     return FALSE;
     }

(2)在自动化开发中,微软还提供了一个方便的COleVariant类型的数值,COleVariant((long)DISP_E_PARAMNOTFOUND,VT_ERROR)。通常,如果我们不清楚参数含义,均可用此值进行代替,系统会自动选择默认值传递给参数。以下行文中,我们以VarOpt代替这个COleVariant对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值