qt linux qaxobject,转 在Qt中用QAxObject来操作Excel

最近写程序中需要将数据输出保存到Excel文件中。翻看《C++ GUI Programming with Qt 4》(Second Edition)发现可以在Qt中运用ActiveX控件,这真是太好了。

看了很久教程也没有学会,毕竟是新手,平时也没学过ActiveX编程。一些在VB中可以方便使用的函数在Qt中都没法儿运行。网上的方法也很多解决不了问题,还会报错。也许是版本问题吧,Qt都更新了好几次了。所以只好自己多试几次。经过摸索我的方法如下:

首先在.pro文件中添加CONFIG += qaxcontainer

接着程序实现

QString filepath=QFileDialog::getSaveFileName(this,tr("Save orbit"),".",tr("Microsoft Office 2007 (*.xlsx)"));//获取保存路径

if(!filepath.isEmpty()){

QAxObject *excel = new QAxObject(this);

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

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

excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示

QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合

workbooks->dynamicCall("Add");//新建一个工作簿

QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿

QAxObject *worksheets = workbook->querySubObject("Sheets");//获取工作表集合

QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1

QAxObject *cellX,*cellY;

for(int i=0;i

QString X="A"+QString::number(i+1);//设置要操作的单元格,如A1

QString Y="B"+QString::number(i+1);

cellX = worksheet->querySubObject("Range(QVariant, QVariant)",X);//获取单元格

cellY = worksheet->querySubObject("Range(QVariant, QVariant)",Y);

cellX->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,0).toInt()));//设置单元格的值

cellY->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,1).toInt()));

}

workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。

workbook->dynamicCall("Close()");//关闭工作簿

excel->dynamicCall("Quit()");//关闭excel

delete excel;

excel=NULL;

}

另外附上在网上搜到的一些常用操作:

QAxWidget excel("Excel.Application");

1) 显示当前窗口:

excel.setProperty("Visible", true);

2) 更改 Excel 标题栏:

excel.setProperty("Caption", "Invoke Microsoft Excel");

3) 添加新工作簿:

QAxObject * workbooks = excel.querySubObject("WorkBooks");

workbooks->dynamicCall("Add");

4) 打开已存在的工作簿:

workbooks->dynamicCall("Open (const QString&)", QString("c:/test.xls"));

5) 获取活动工作簿:

QAxObject * workbook = excel.querySubObject("ActiveWorkBook");

6) 获取所有的工作表:

QAxObject * worksheets = workbook->querySubObject("WorkSheets");

7) 获取工作表数量:

int intCount = worksheets->property("Count").toInt();

8) 获取第一个工作表:

QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1);

9) 获取cell的值:

QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );

以上操作不一定每个都可用(都好用),仅作为参考吧。起码我第9)个就没成功,不知为何?后来我改用了Range(QVariant, QVariant)的方法来替代它。

最后附上我用QAxBase::generateDocumentation()方法获得的对应于Excel.Application的带Qt数据类型的QAxObject或者QAxWidget中可用的属性、信号和槽列表(虽然我还不大会用,不过参考下还是很好的):

http://www.cppblog.com/zhonghua/archive/2014/01/13/205345.html

在Qt中用QAxObject来操作Excel

目录(?)[+]   下一篇:用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel 最近写程序中需要将数据输出保存到Excel文件中.翻看

Qt通过ODBC来操作Excel

示例代码: #include #include #include #include ...

Qt QAxObject操作excel文件过程总结(转):

正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...

QT操作EXCEL

介绍一下最基本的QT对EXCEL的读写操作. 声明:转载于:http://blog.csdn.net/czyt1988/article/details/52121360 在使用QT的操作数据库的时候, ...

Qt之操作Excel

Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...

qt 操作excel表格

自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

Qt在windows 平台操作保存execel的表格(通过QAxObject来操作)

粗略操作 QT += core gui sql CONFIG += qaxcontainer greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #incl ...

[转]Qt 5.5 操作 Excel 的速度 效率问题

转自:http://blog.csdn.net/li494816491/article/details/50274305 1. QAxObject *_excelObject1 =newQAxObje ...

Qt使用QAxObject快速批量读取Excel内容

网上各种教程用的方法主要是如下这一句: QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, ...

随机推荐

Focus, w/o disturbance

Focus = Aim + Execution + Persistence Disturbance = Disappointment + Anxiety + Failure

C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...

python 练习(一)代码统计工具的实现

最近部门成立了一个python学习小组,旨在让大家在做项目中开始成长起来,于是老大就给布置了第一个小任务:代码统计工具,具体的需求如下: 需求: . 能够统计指定目录下C++程序的代码行数. . C+ ...

Oracle EBS在编码方式为AL32UTF8时的注意事项

现如今的EBS系统中,为了推进国际化的进程,以及系统向全球化的扩展,在Oracle数据库的编码方式上渐渐从支持中国本土简体中文的ZHS16GBK转向了更趋于国际化的AL32UTF8编码方式.但随之而来 ...

Windows server 2008系统下FTP服务器的安装

一.在 Windows 服务器上安装 FTP 服务 1. 在"开始"菜单上,单击"管理工具",然后单击"服务器管理器". 2. 在&quot ...

创建Windows服务(C++)

这次我们来创建一个windows本地服务,需要有以下功能: 安装服务. 卸载服务. 手动启动服务. 开机自动启动服务. 控制服务(停止.暂停.恢复.启动). 服务概念及介绍 看下图,一切尽在不言中了( ...

mysql 安装配置

l  下载压缩包: 官网下载地址:https://dev.mysql.com/downloads/mysql/5.1.html#downloads 第一步: 将下载的压缩包解压到你要安装的目录下 第二 ...

【开发技术】Beyond Compare

黑色表示左右两侧的文件(夹)是一样的; 紫色表示右(左)侧是完全没有的,这时我们右击这个文件(夹),选择“复制到右(左)侧”即可: 红色表示两边都有这个文件(夹),但不完全相同,这时你就要权衡一下修改 ...

python基础 字典练习

练习1:info = [ {'wangming': { 'money':1111, 'car':['bmo','bsj'], 'info':{ 'phone':1511111, 'age':18} } ...

c#switch语句的用法

switch条件语句是一种很常用的选择语句,它与if条件语句不同,它只针对某个表达式的值作出判断,从而决定执行哪一段代码. switch条件语句用到的关键字: switch case break de ...

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt使用QAxObject来创建Excel文件的步骤如下: 首先,确保你已经安装了Microsoft Office软件,并且拥有Excel的许可证。 然后,你需要在Qt项目中添加以下代码段: ```cpp #include <QAxObject> ... QAxObject* excel = new QAxObject("Excel.Application", this); // 创建Excel应用程序对象 excel->dynamicCall("SetVisible(bool)", false); // 设置Excel应用程序不可见 QAxObject* workbooks = excel->querySubObject("Workbooks"); // 获取工作簿集合对象 QAxObject* workbook = workbooks->querySubObject("Add"); // 创建新工作簿 QAxObject* worksheets = workbook->querySubObject("Worksheets"); // 获取工作表集合对象 QAxObject* worksheet = worksheets->querySubObject("Item(int)", 1); // 获取第一个工作表 QAxObject* cells = worksheet->querySubObject("Cells"); // 获取单元格集合对象 // 在A1单元格中写入数据 QAxObject* cell = cells->querySubObject("Item(int,int)", 1, 1); cell->dynamicCall("SetValue(const QVariant&)", "Hello, Excel!"); workbook->dynamicCall("SaveAs(const QString&)", "C:/path/to/excel.xlsx"); // 保存工作簿 workbook->dynamicCall("Close()"); // 关闭工作簿 excel->dynamicCall("Quit()"); // 退出Excel应用程序 ``` 上述代码中,我们使用QAxObject来创建Excel应用程序对象、工作簿、工作表、单元格等。你可以根据需要进行更多的操作,比如设置单元格格式、写入更多数据等。 最后,记得在结束程序前释放资源,可以在程序退出时执行以下代码: ```cpp delete excel; ``` 请确保将代码中的文件路径替换为你希望保存Excel文件的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值