- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用Qt 调用Excel
Eugene Eremin
翻译:tong #
原文Url :http://www.qtlib.ru/index.php?option=com_contenttask=viewid=42Itemid=28
Qt 3.1 及以上版本的一个新特性是为Windows 操作系统提供了ActiveX 支持。开发者如果关
心如何使用Qt 操作COM 组件,比如在Excel 里插入新数据,这个新增功能就很重要了。
然而不幸的是,在Internet 上没有太多这方面的主题可以借鉴。我在这里演示一个例子,可
能会对大家有所帮助。
首先我们来看一下Qt 自带的例子。通常Qt 自带的例子可以告诉大家一些常用的知识点。我
不记得在哪里看过,说一个好的文档应当是用户看过后不再存在不解的地方。但Qt 只提供
了一个与MS Outlook Express 交互的例子。不过这就是我开始Excel 交互研究的起点了。
ActiveX 和COM 的区别不是很大,我不是这方面的专家,但我在这里推荐大家看一本Adam
Denninga 的书“ActiveX for professionals ”。这本书会帮助大家很好地理解这些概念。第一步,
我们来引入Excel ,并创建一个对象。
#include qaxobject.h
QAxObject* excel = new QAxObject( Excel.Application, this ); //获取一个Excel 对象
excel-dynamicCall( SetVisible(bool), TRUE ); //设置为可见
这里我们通过代码构建了一个对象,并通过对象打开了Excel 。第二步,我们计划插入新数
据。为了做到这一步,必须了解一点 Excel 文档的结构。Excel 应用程序包括一系列的
workbooks ,每个workbook 又由多个sheets 组成。Microsoft 公司并没有给出太多这方面的
结构信息,我在Google 上寻找了不短的时间,也没有太多的结果。
QAxObject *workbooks = excel-querySubObject( Workbooks ); //得到Workbooks 集合的指针
QAxObject *workbook = workbooks-querySubObject( Open(const QString), C:\\data\\A.xls );
//打开硬盘上的一个Excel 文档
QAxObject *sheets = workbook-querySubObject( Sheets ); //得到Sheets 对象的指针
QAxObject *StatSheet = sheets-querySubObject( Item(const QVariant), QVariant(stat) );
//得到名为stat 的一个sheet 的指针
StatSheet-dynamicCall( Select() ); //选择名为stat 的sheet,使之可见
QAxObject *range = StatSheet-querySubObject( Range(const QVariant),
QVariant( Qstring(A1:A1))); //选择A1:A1 这个range 对象
range-dynamicCall( Clear() ); // 清除range 对象
range-dynamicCall( SetValue(const QVariant), QVariant(5) ); //将该range 对象的值设为5
接下去用户可以保存和关闭这个Excel 文档了。
最后说一句,这些对象的接口可以通过generateDocumentation () 产生。比如,我们可以这
样做:
QFile outfile(excel.html);
QTextStream out( outfile );
outfile.open( IO_WriteOnly | IO_Translate );
QString docu = excel-generateDocumentation();
out docu;
outfile.close();
这些信息被保存在名为“excel.html ”的文件里。如果插入的数据很大,会花费很多的
文档评论(0)