用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel
上一篇:在Qt中用QAxObject来操作Excel 1.系统环境:Qt 4.7+MinGW、Win7、QtCreator、Excel 2007 2.生成excel.h、excel.cpp、office.h和office.cpp
dumpcpp ---- ActiveQt模块的命令行工具,可以导出Qt能识别的COM组件的接口。这个工具在Qt库的bin目录下可以找到。如果没有,也可以在Qt库\tools\activeqt\dumpcpp文件夹中找到源码,自己编译一下就有了。在命令行中进入某个目录,比如D:\,然后执行dumpcpp {00020813-0000-0000-C000-000000000046}就可以在D:\下生成excel.h和excel.cpp文件了。这两个文件中就包含了Qt导出的操纵Excel的类和申明。
如果找不到dumpcpp这个工具,可能是Qt库的bin目录没有加入到环境变量path中,或者bin目录下没有这个工具。如果dumpcpp提示 dumpcpp: type library '' not found 或者QAxBase::setControl: requested control {00020813-0000-0000-C000-000000000046} could not be instantiated,那么可以将 {00020813-0000-0000-C000-000000000046}改成Excel.Application或者{00024500-0000-0000-C000-000000000046}试试。如果还不行,就去注册表HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\中找吧。。。比如HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{00020813-0000-0000-C000-000000000046}\1.6\0\win32下有个键值C:\Program Files\Microsoft Office\Office12\EXCEL.EXE,那么 {00020813-0000-0000-C000-000000000046} 就是正确的CSSID了。
有了excel.h和excel.cpp还不行,加入到工程,编译后会发现其中很多类型不全,会出现诸如excel.h:26: 错误:use of enum 'MsoCalloutDropType' without previous declaration之类的很多错误。这是因为还需要office.h和office.cpp。同样用dumpcpp,执行dumpcpp {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}就可得到office.h和office.cpp文件。这是Microsoft Office 12.0 Object Library,在注册表中位置是HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.4\0\win32。若提示找不到qpixmap类,则在excel.h的头文件中添加#include <QtGui/qpixmap.h>。
将office.h和office.cpp也包含进工程,并在excel.h中添加#include"office.h"后再次编译,还是不行。会出现:office.h:1666: 警告:this decimal constant is unsigned only in ISO C90这样的错误。这是由编译器引起的。找到这个常数,在常数后面增加一个UL标识,或者ULL表示,如4294967295UL,这样就不会报警了。再次编译,会出现:
6.源码下载 1)testExcel2_仅包含修改后的excel,h、excel.cpp、office.h和office.cpp 2)testExcel2_包含所有源码,不包含Qt运行库 3)testExcel2_包含所有源码和Qt运行库

