一个Qt Excel的文档翻译

使用Qt调用Excel

Eugene Eremin

翻译:tong # cngis.org

原文Urlhttp://www.qtlib.ru/index.php?option=com_content&task=view&id=42&Itemid=28

 

Qt 3.1及以上版本的一个新特性是为Windows操作系统提供了ActiveX支持。开发者如果关心如何使用Qt操作COM组件,比如在Excel里插入新数据,这个新增功能就很重要了。

然而不幸的是,在Internet上没有太多这方面的主题可以借鉴。我在这里演示一个例子,可能会对大家有所帮助。

首先我们来看一下Qt自带的例子。通常Qt自带的例子可以告诉大家一些常用的知识点。我不记得在哪里看过,说一个好的文档应当是用户看过后不再存在不解的地方。但Qt只提供了一个与MS Outlook Express交互的例子。不过这就是我开始Excel交互研究的起点了。

ActiveXCOM的区别不是很大,我不是这方面的专家,但我在这里推荐大家看一本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:dataA.xls" ); //打开硬盘上的一个Excel文档

QAxObject *sheets = workbook->querySubObject( "Sheets" ); //得到Sheets对象的指针

QAxObject *StatSheet = sheets->querySubObject( "Item(const QVariant&)", QVariant("stat") );     //得到名为stat的一个sheet的指针

StatSheet->dynamicCall( "Select()" ); //选择名为statsheet使之可见 

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”的文件里。如果插入的数据很大,会花费很多的时间。MFC使用了专门的class,但我没能在Qt里实现这个class。如果有意见,请反馈至http://prog.org.ru/forum/ptopic_141.html

译者注:本文由在线语言工具从俄语翻译至英语,然后人工翻译成中文,因此中文与俄文可能有一些出入,欢迎指正。

Qt 4里已经有很多的有关ActiveQt的文档,大家应当以那个为主要的学习的材料。

 

1 thought on “一个Qt Excel的文档翻译

  1. 元平

    这样做肯定是一个盲目的做法,会越走越远.不可取.要想插入一个数值,或者查询某一个值,将变成一件极难的事情.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *