QAxObject对COM对象进行了封装,QAxObject派生自QAxBase,而后者提供了一组API通过IUnknown(不清楚IUnknown的同学可以去看看COM对象模型)指针直接访问COM对象,我们这里讲的excel也是一个COM对象,因此我们可以通过QAxObject来操作它,为了便于理解,我们首先了解一下excel的对象的主要层次结构:

上图是excel对象的层次结构,1个excel就有1个Application对象,1个Application对象由多个Workbook对象组成,这些Workbook对象由Workbooks对象统一管理,Workbook对象下可以包含若干个Worksheet,这些Worksheet对象也有一个WorkSheets对象来统一管理,接下来是Range对象,这个对象就对应Worksheet里的表格单元了,好了大家应该清楚了Excel的对象的主要层次结构了吧.

下面我们来看看QAxObject是怎么来导出excel的:

1.新建一个excel

QAxObject *pApplication = NULL;

QAxObject *pWorkBooks = NULL;

QAxObject *pWorkBook = NULL;

QAxObject *pSheets = NULL;

QAxObject *pSheet = NULL;

void newExcel(const QString &fileName)

{

pApplication = new QAxObject();

pApplication->setControl("Excel.Application");//连接Excel控件

pApplication->dynamicCall("SetVisible(bool)", false);//false不显示窗体

pApplication->setProperty("DisplayAlerts", false);//不显示任何警告信息。

pWorkBooks = pApplication->querySubObject("Workbooks");

QFile file(fileName);

if (file.exists())

{

pWorkBook = pWorkBooks->querySubObject("Open(const QString &)", fileName);

}

else

{

pWorkBooks->dynamicCall("Add");

pWorkBook = pApplication->querySubObject("ActiveWorkBook");

}

pSheets = pWorkBook->querySubObject("Sheets");

pSheet = pSheets->querySubObject("Item(int)", 1);

}

2.增加1个Worksheet

void appendSheet(const QString &sheetName)

{

QAxObject *pLastSheet = pSheets->querySubObject("Item(int)", cnt);

pSheets->querySubObject("Add(QVariant)", pLastSheet->asVariant());

pSheet = pSheets->querySubObject("Item(int)", cnt);

pLastSheet->dynamicCall("Move(QVariant)", pSheet->asVariant());

pSheet->setProperty("Name", sheetName);

}

3.向Excel单元格中写入数据

void setCellValue(int row, int column, const QString &value)

{

QAxObject *pRange = pSheet->querySubObject("Cells(int,int)", row, column);

range->dynamicCall("Value", value);

}

4.保存Excel

void saveExcel(constQString &fileName)

{

pWorkBook->dynamicCall("SaveAs(const QString &)",

QDir::toNativeSeparators(fileName));

}

5.释放Excel

void  freeExcel()

{

if (pApplication != NULL)

{

pApplication->dynamicCall("Quit()");

delete pApplication;

pApplication = NULL;

}

}

Qt导出Excel的简单实现的更多相关文章

  1. ASP.net中导出Excel的简单方法介绍

    下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...

  2. easyExcel导出excel的简单使用

    easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...

  3. spring mvc项目中导出excel表格简单实现

    查阅了一些资料,才整理出spring mvc 项目导出excel表格的实现,其实很是简单,小计一下,方便以后查阅,也希望帮助有需要的朋友. 1.导入所需要依赖(Jar包).我使用的是maven,所以坐 ...

  4. POI导出excel的简单demo

    目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...

  5. 导出excel的简单方法

    excel的操作,最常用的就是导出和导入,废话不多说上代码. 本例使用NPOI实现的,不喜勿喷哈.... /// <summary> /// 导出Excel /// </summar ...

  6. NPOI 给导出Excel添加简单样式

    需求分析:如下图为我之前导出的Excel数据,没有一点样式,标题行不明显,各个列的数据紧凑,查看数据时得手动拉宽每列,故这次要针对以上问题对它进行优化 结果展示: 代码: /// <summar ...

  7. C#利用NPOI导出Excel类(简单版)

    代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespac ...

  8. [转]Java中导入、导出Excel

    原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ...

  9. php不使用插件导出excel

    php不使用插件导出excel的简单方法,首先获取需要导出的数据的数组,数组的格式在下面. 之后就是定义文件名称和需要导出的excel的样式,最后就是循环数组,输出数据了 代码: $filename= ...

随机推荐

  1. android 新浪微博客户端的表情功能的实现

    这是一篇好文章,我转来收藏,技术的最高境界是分享. 最近在搞android 新浪微博客户端,有一些心得分享弄android客户端表情功能可以用以下思路1.首页把新浪的表情下载到本地一文件夹种,表情图片 ...

  2. Internetmap.apk实现原理分析

    1.本地实现调用 程序根据data文件目录下的asinfo.json文件(包含自治域网络名和对应的坐标值),调用so文件绘制asn结点图(ASN,AutoSystemNode,自治域结点) 2.路由查 ...

  3. CodeSmith使用总结--调用自定义方法

    上一篇读取了一个表的内容,但是到了真正应用的时候还是不够用的,我们很容易可以对比出来,SQL里边的数据类型的定义和C#中有所不同,比如Saler--String,大写的String在C#中不是一个类型 ...

  4. ASP.Net MVC概念及基本

    1.1概念 MVC是一种软件设计模式,即:Model(模型).View(视图).Controller(控制器)  .其主要设计目标是将用户接口和逻辑层相分离,以便开发人员更好的关注逻辑层的设计和测试, ...

  5. javascript系统时间

    <div>                <%--系统时间--%>                当前时间是:                <script type=& ...

  6. 3D图片采集与展示(SurfaceView 自适应 Camera, 录制视频, 抽取帧)

    最近在做一个3D图片采集与展示. 主要功能为:自定义Camera(google 已经摈弃了Camera, 推荐使用Camera2,后续篇幅,我将会用Camera2取代Camera),围绕一个物体360 ...

  7. weblogic开机启动-超简单

    1.编写weblogic启动脚本,命名为start_weblogic_server.sh,内容如下:  #!/bin/bashnohup /home/weblogic/Oracle/Middlewar ...

  8. Eclipse MAT: Understand Incoming and Outgoing References

    引用:http://xmlandmore.blogspot.hk/2014/01/eclipse-mat-understand-incoming-and.html?utm_source=tuicool ...

  9. web-打印

    项目前景 由于之前的打印是客户端程序,也就是winform做的,现在需要改版成网页版,其他功能都能够很好的实现,就是在打印上遇到一些难点.由于第一次做打印功能,刚开始照搬winform中调用word文 ...

  10. struts2 MessageStoreInterceptor 拦截器的使用

    MessageStoreInterceptor 拦截器可以把和该 Action 相关的 messages, errors 和 field errors(下称 "消息") 保存到 s ...