Qt-excel文件操作方法

Qt实战案例(4)——利用Qt读取Excel表格 目录一、项目介绍二、项目基本配置2.1 添加基础文件三、UI界面设计四、主程序实现五、效果演示 一、项目介绍 利用Qt读取Excel表格并导出为txt文档。 二、项目基本配置 2.1 添加基础文件 这里我写了操作Excel的两个基础文件,分别为exceloperater.h和exceloperater.cpp。需要用的时候直接在Headers和Sources内右键添加现有文件,将其加入即可。 这里简单介绍一下这两个文件。exceloperater.cpp文件封装了几个函数,分别为: void createE 阅读详情
 

Qt-QAxObject

QAxObject是Qt提供的包装COM组件的类,通过COM操作Excel需要使用QAxObject类,使用此类还需要在pro文件增加“QT += axcontainer”

QAxObject的具体说明请见帮助文档

与excel com连接的方法

#include <QAxObject>  //注意包含此头文件,同时在pro增加QT+= axcontainer
QAxObject *excel = new QAxObject(this);//建立excel操作对象
excel->setControl("Excel.Application");//连接Excel控件
excel->dynamicCall("SetVisible (bool Visible)","false");//设置为不显示窗体
excel->setProperty("DisplayAlerts", false);//不显示任何警告信息,如关闭时的是否保存提示
excel->dynamicCall(?"Quit(void)"?);//关闭excel程序,操作完成后记着关闭,由于是隐藏的看不到,不关闭进程会有很多excel.exe
//关闭excel程序之前记着先关闭.xls文件,具体见后续内容:workbook->dynamicCall("Close(Boolean)", false); //关闭文件

Excel基本操作

下面只介绍主要读写操作的方法,若需要修改单元格格式等操作,请看“Excel VBA参考手册.chm”或者其他类似资料

手册分享地址: 链接: https://pan.baidu.com/s/1pLvC5nl 密码: dnik

excel文件操作

获取当前工作簿的集合

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

新建一个工作簿

workbooks->dynamicCall("Add");//新建一个工作簿
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿

打开一个已有的工作簿

QString excel_file_path = "XXXX.xlsx";
QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", excel_file_path);

保存工作簿

workbook->dynamicCall("Save()");  //保存文件
workbook->dynamicCall("Close(Boolean)", false);  //关闭文件
excel->dynamicCall(?"Quit(void)"?);//关闭excel

另存为工作簿

//用QDir::toNativeSeparators, 将路径中的"/"转换为"\",否则无法保存,/只是qt中可以识别
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(excel_file_path));
workbook->dynamicCall("Close (Boolean)", false);  //关闭文件
excel->dynamicCall(?"Quit(void)"?);//关闭excel

sheet工作表操作

下面的代码用到的workbook都是上面工作簿操作后得到的,也就是对某一个工作簿(excel文件)进行操作

获取所有工作表

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

根据序号获取某个工作表,序号顺序就是excel打开后下方的排序

QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);

获取表中的行数列数

QAxObject* usedrange = worksheet->querySubObject("UsedRange");//sheet范围
int intRowStart = usedrange->property("Row").toInt();//起始行数
int intColStart = usedrange->property("Column").toInt(); //起始列数
QAxObject *rows, *columns;
rows = usedrange->querySubObject("Rows");//行
columns = usedrange->querySubObject("Columns");//列
int intRow = rows->property("Count").toInt();//行数
int intCol = columns->property("Count").toInt();//列数

内容操作

数据内容操作-获取单元格-基于坐标

QAxObject* cell = worksheet->querySubObject("Cells(int, int)", i, j);

数据内容操作-获取单元格-基于行列名称

QAxObject* cell = worksheet->querySubObject("Range(QVariant, QVariant)", "A1");

数据内容操作-读单元格内容

QVariant cell_value = cell->property("Value");

数据内容操作-写单元格内容

cell->setProperty("Value", "内容");

其他

大数据量读取

读取所有单元格内容-数据量大请使用此方式,只需要进行一次操作即可读取所有内容到内容,避免重复每个单元格进行QAxObject操作

QVariant var;
QAxObject *usedRange = sheet->querySubObject("UsedRange");//获取用户区域范围
if(NULL == usedRange || usedRange->isNull()) {
    return var;
}
var = usedRange->dynamicCall("Value");//读取区域内所有值
delete usedRange;

此时结果以QVariant保存,需要自行转换成QList<QList<QVariant>>

QList<QList<QVariant>> excel_list;
auto rows = var.toList();
for(auto row:rows) {
    excel_list.append(row.toList());
}

大数据量写入

大数据以QList<QList<QVariant>>存储,与读取类似,此处需要先指定区域范围

QAxObject *user_range = this->sheet->querySubObject("Range(const QString&)","A1:D100");//范围

然后写入数据

range->setProperty("Value", var);//需要将QList<QList<QVarient>>转换为QVarient

范例:一个完整的打开-读取-关闭的操作

QString excel_file_path = QDir::currentPath()+"/a.xlsx";
excel_file_path = QDir::toNativeSeparators(excel_file_path);
QAxObject *excel = new QAxObject(this);//建立excel操作对象
excel->setControl("Excel.Application");//连接Excel控件
excel->setProperty("Visible", true);//显示窗体看效果
excel->setProperty("DisplayAlerts", true);//显示警告看效果
QAxObject *workbooks = excel->querySubObject
        ("WorkBooks");//获取工作簿(excel文件)集合
workbooks->dynamicCall("Open(const QString&)", excel_file_path);
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",1);
QAxObject *usedRange = worksheet->querySubObject("UsedRange");
QVariant var = usedRange->dynamicCall("Value");//这里是所有的内容
workbook->dynamicCall( "Close(Boolean)", false );
excel->dynamicCall( "Quit(void)" );
delete excel;

注意:
1、此范例为了看到效果吧窗口和警告设置为了显示,请自行改为false
2、excel所有操作均是通过QAxObject 进行COM组件的操作,包括打开文件也是,所以路径必须传递完整路径,不能传递相对路径
3、QAxObject自身会维护new出的空间,直接delete第一个QAxObject 即可
4、所有内容保存在var的变量中
5、上述操作均为判断返回值,若文件不存在后续内容会报错

Techie亮博客,转载请注明:Coologic » Qt-excel文件操作方法

 
使用Qt打开Excel文件 接下来,我们查询第一个工作表,并获取其使用范围。在读取完数据后,我们释放了使用的对象,并关闭和退出Excel应用程序。在Qt中,可以使用QAxObject类来操作Office应用程序,包括打开和读取Excel文件。下面是一个详细的示例,演示如何在Qt中打开Excel文件并读取其内容。这就是使用Qt打开Excel文件并读取内容的方法。接下来,可以创建一个函数来打开和读取Excel文件。函数并传入Excel文件的路径来打开并读取文件。在你的Qt应用程序的某个地方,你可以调用。在这个函数中,我们首先创建了一个。 阅读详情

相关推荐

使用 Qt 调用 Excel

心如何使用 Qt 操作 COM 组件,比如在 Excel 里插入新数据,这个新增功能就很重要了。然而不幸的是,在 Internet 上没有太多这方面的主题可以借鉴。如果插入的数据很大,会花费很多的时间。通常 Qt 自带的例子可以告诉大家一些常用的知识点。这里我们通过代码构建了一个对象,并通过对象打开了 Excel。不记得在哪里看过,说一个好的文档应当是用户看过后不再存在不解的地方。结构信息,我在 Google 上寻找了不短的时间,也没有太多的结果。第一步,我们来引入 Excel,并创建一个对象。

道亦无名 1938

Qt中打开excel文件

qt中打开excel文件有两种方法 第一种,用QAxObject,在使用QAxObject,要在.pro文件中添加QT += axcontainer,同时在调用文件中添加#include 打开文件代码如下: void newExcel(QString &fileName) { QAxObject *pApplication = NULL; QAxObject *p

多看多听多总结 8760

Qt环境下的Excel文件操作实战指南

Qt是一个跨平台的C++应用程序开发框架,最初由挪威公司Trolltech于1991年开发。自2008年起,Qt被芬兰的诺基亚公司所拥有,并由Digia公司继续开发和维护。Qt以其“一次编写,到处运行”的跨平台特性和丰富的API而闻名,支持从桌面到嵌入式系统的多种操作系统。Qt框架最初设计用于构建图形用户界面(GUI),但随着发展,它已经扩展到包括网络、数据库、多线程、XML和Web服务等众多功能。

weixin_35755640的博客 1491

QT快速操作Excel的实现介绍及操作类封装

QT中操作Excel还是比较简单的,Qt提供了QAxObject,包装COM组件的类,通过COM通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加"QT  += axcontainer "。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 6124

qt打开xls文件_Qt-excel文件操作方法

博客地址已更改,文章数量较多不便批量修改,若想访问源文请到coologic博客查阅,网址:www.coologic.cn如本文记录地址为 techieliang.com/A/B/C/ 请改为www.coologic.cn/A/B/C/ 即可查阅版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:本文标题:Qt-excel文件操作方法本文地址...

weixin_39631370的博客 983

QT(24)-文件操作-EXCEL-dynamicCall、querySubObject、setProperty-实例源码

QT-文件操作EXCEL。整理了一下用QT操作EXCEL文件的用法,附上实例源码。 QT操作EXCEL文件主要用到QAxObject和dynamicCall();querySubObject();setProperty(); 1.操作EXCEL文件的编码步骤 2.动态数组的批量操作 1. 操作EXCEL文件的编码步骤 1.1修改配置文件 .pro...

aggie4628的专栏 9123

Qt操作读写Excel文件数据,【亲测有效】

利用Qt读写Excel表格,多线程编写

qq_15243129的博客 4436

Qt快速读取Excel,QVariant 转QList MyType

参考好多博客,天下博客一大抄,有人不会抄!导致没有得到结果。 故此,写文档用于记录两部分内容: 1、Qt读取Excel的两种方法:1.1、逐单元格读取(慢),1.2、整体范围读取(快) 2、Qt读取Excel之后,数据存储在QVariant var中,如何将 QVariant 中的数据,读进QList<QList<MyType> >,然后读进QList<MyT...

CSDN的博客 2244

Qt5编程——excel操作

方法一: //创建QODBC数据库(excel文件) QSqlDatabase db = QSqlDatabase::addDatabase("QODBC","excelexport"); QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE

不会编程的程序猿 5856

Qt操作excel

http://download.csdn.net/source/2266076 更高级的excel操作建议:先在excel里录制宏然后查询宏代码最后翻译到qt类中 改进版:http://download.csdn.net/source/2627587操作更便捷例:     QString szXlsFile = tr("D://WUTEMP//WUT

蚂蚁 1631

QT 操作excel 类封装

转自:http://blog.csdn.net/liliming1234/article/details/7054941 pro file CONFIG += qaxcontainer QT += core QT -= gui TARGET = QExcel CONFIG += console CONFIG -= app_bundl

fqx111的专栏 787

103、QT搭建Excel表环境-使用Qtxlsx库

参考文档:https://blog.csdn.net/weixin_41923961/article/details/103706492。链接: https://pan.baidu.com/s/1Y7Ld0Mhf6y6HbAoiAPaHIw 提取码: sypg。下载QtXlsx源码:https://github.com/dbzhang800/QtXlsxWriter。如果你没有MinGW_Get就只有先去安装了:http://www.mingw.org/如果编译时遇到这个问题,然后分别执行下面的命令。

qq_36561846的博客 784

Qt读写Excel--QXlsx工作表显示/隐藏状态设置4

QXlsx入门教程:查询设置工作表(Sheet)显示、隐藏状态

mahuifa的博客 2294

vb关闭excel文件_仪表远程控制(一)文件篇

做电子电路的朋友们肯定都是离不开仪表,常用的仪表有示波器、信号分析仪、电源等。这类仪表在工业或者民用领域比较多。还有一些射频类仪表,如信号源、频谱仪、功率计、矢量网络分析仪等。本人做的比较杂,数字和射频,包括软件都有所涉及,因此对上述仪表虽然说不上精通,但也算是摸的比较多。后期我会以仪表展开,分别对不同仪表的远程控制做介绍,并会贴出相关代码,希望对同行们有所帮助。为什么会从文件篇开始,因为第一仪表...

weixin_39794734的博客 602

Qt6 编译使用QtXlsx库详细教程

QtXlsx库编译与使用指南 QtXlsx是一个跨平台的Qt第三方库,无需安装Office即可读写Excel文件(.xlsx)。支持: 基础操作:创建/保存文件、单元格读写 高级功能:格式控制、公式计算、多工作表 两种编译方式: Qt Creator直接构建(生成libQXlsx.a) 命令行使用qmake+mingw32-make编译 使用示例:包含数据写入、公式添加和样式设置代码片段 注意事项:需链接Qt5Xlsx库,仅支持Excel 2007+格式 完整教程及源码见GitHub仓库和CSDN博文链接

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 2957

QT开发桌面端PDF解析工具:集成PDF-Parser-1.0实战

本文介绍了如何在星图GPU平台上自动化部署PDF-Parser-1.0文档理解模型,实现高效的PDF内容解析。该模型能够自动提取文本、表格和公式,适用于合同分析、数据报表处理等文档自动化场景,显著提升办公效率。

weixin_30021053的博客 257
上一篇: Qt Creator子目录项目-类似VS解决方案
下一篇: Qt单元测试(QTestLib)
coologic
博客等级 码龄7年 35粉丝 161原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值