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. Asp.Net HttpApplication请求管道与Session(一)

    1.请求处理顺序执行事件 /********************请求处理顺序执行事件**********************/ /// <summary> /// 请求入站 /// ...

  2. SqlCommand和SqlDataAdapter有什么区别

    因为DataSet是离线的,所以SqlDataAdapter这个对象是连接DataSet和数据库的桥梁,所有对DataSet的操作(填充,更新等)都要通过他 ado.net数据访问有两种方式: 1.离 ...

  3. Windows下使用ODBC API访问数据库之关键

    本文采用SQL2005 + VS2008环境,以ODBC API方式成功连接数据库. 1.SQL安装和环境配置 这部分网上随便搜一下都有很多资料,而且很容易就可以配置成功. 注意的关键点: SA账号配 ...

  4. hdu 2438Turn the corner 三分

    Turn the corner Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. C# 操作 Excel

    1.NOIP (功能齐全,评价较高) http://www.codeproject.com/Tips/813187/Csharp-Read-and-write-Excel-xls-and-xlsx-f ...

  6. tiny xml 使用总结

    这几天在埋头写自己的3D文件浏览器(稍后发布),突发奇想的要把自己的内部格式转化成XML,于是,把以前在研究所时用过的ExPat翻了出来.ExPat是基于事件的XML解释器,速度挺快的,但结构方面有点 ...

  7. mac下升级ruby环境版本

    在ios开发中会经常使用到cocoapods来管理第三方框架,在安装cocoapods的时候会涉及到ruby环境,有时候会因为版本过低会导致安装失败,本文主要讲一下如何升级ruby环境 安装rvm,r ...

  8. 自定义View—绘制基本图形

    一.Canvas能够绘制哪些图形 二.

  9. [C入门 - 游戏编程系列] 贪吃蛇篇(三) - 蛇定义

    蛇是这个游戏的主角,要实现的功能也是最复杂的一个.因为蛇不止有属性,还有行为.它会动,还会吃东西,还会长大!而且还会死!这是很要命的.我一向看不懂复杂的代码,也写不出复杂的代码.所以对于蛇,我很纠结, ...

  10. IE10-IE11在NET4.0下出现“__doPostBack未定义”解决方案

    IE10在NET4.0下出现"__doPostBack未定义"的办法 参考文章: http://blogs.msdn.com/b/scott_hanselman/archive/2 ...