Qt excel 操作使用说明
一.简单介绍
QAxObject是Qt提供的包装COM组件的类,通过COM通过COM操作使用QAxObject类,使用此类,需要在pro文件中添加
QT += axcontainer
二.与excel com连接的方法
1 #include <ActiveQt/QAxObject>
2 QAxObject *excel = new QAxObject("Excel.Application"); //!建立excel操作对象,并连接Excel控件
3 excel->dynamicCall("SetVisible (bool Visible)", "false"); //! 设置为不显示窗体
4 excel->setProperty("DisplayAlerts", false); //! 不显示任何警告信息, 如关闭时的是否保存提示
5 excel->dynamicCall("Quit(void)"); //! 关闭excel程序,操作完后记着关闭,由于是隐藏在后台进程中,不关闭进程会有很多excel.exe。
6 workbook->dynamicCall("Close(Boolean)", false); //! 关闭exce程序先关闭.xls文件
三.Excel基本操作
只介绍简单的读写操作,需要修改单元格格式等操作,请"Excel VBA参考手册.chm"
3.1 excel文件操作
获取当前工作簿的集合
QAxObject *workbooks = excel->querySubObject("Workbooks"); //! 获取工作簿(excel文件)集合
新建一个工作簿
1 workbooks->synamicCall("Add"); //新建一个工作簿
2 QAxObject *workbook = excel->querySubObject("ActiveWorkBook"); //! 获取当前工作簿
打开一个已有的工作簿
1 QString filename = "e:/123.xlsx";
2 QAxObject* workbook = workbooks->querySubObject("Open(const QString&)", filename);
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
CSDN QT大纲:Qt开发必备技术栈学习路线和资料
保存工作簿
1 workbook->dynamicCall("Save()"); //!保存文件
2 workbook->dynamicCall("Close(Boolean)", false); //! 关闭文件
3 excel->dynamicCall("Quit()"); //! 关闭excel
另存为工作簿
1 QDir::toNativeSeparators,将路径中的"/"转换为"\",否则无法保存,"/"只是qt中可以识别
2 workbook->dynamiCall("SaveAs(const QString&)", QDit::toNativeSeparators(filename));
3 workbook->synamicCall("Close(Boolean)", false); //! 关闭文件
4 excel->dynamicCall("Quit()"); //! 关闭excel
3.2 Sheet工作表操作
获取所有工作表
QAxObject *worksheets = workbook->querySubObject("Sheets"):
根据序号获取某个工作表,序号顺序就是excel 打开后下方的排序
QAxObject *worksheet = worksheets->querySubObejct("Item(int)", 1);
获取表中的行数列数
1 QAxObject* usedrange = worksheet->querySubObject("UsedRange"); //! sheet 范围
2 int intRowStart = usedrange->property("Row").toInt(); //! 起始行数
3 int intColStart = usedrange->property("Column").toInt(); //! 起始列数
4 QAxObject *rows, *columns;
5 rows = usedrange->querySubObject("Rows"): //! 行
6 columns = usedrange->querySubObject("Columns"); //! 列
7 int intRow = rows->property("Count").toInt(); //! 行数
8 int intCol = columns->property("Count").toInt(); //! 列数
3.3 内容操作
数据内容操作--获取单元格--基于坐标
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", "内容");
4.其他(没有实践操作)
4.1 大数据量读取
读取所有单元格内容-数据量大,只需要进行一次操作即可读取所有内容,避免重复对每个单元格进行QAxObect操作
1 QVariant var;
2 QAxObject * usedRange = sheet->querySubObject("UseRange"); //! 获取用户区域范围
3 if(NULL == usedRange || usedRange->isNull())
4 {
5 return var;
6 }
7 var = usedRange->dynamicCall("Value"); // 读取区域内所有值
8 delete usedRange;
此时结果以QVariant保存,需要自行转化为QList<QList<QVariant>>
1 QList<QList<QVariant>> excel_list;
2 auto rows = var.toList();
3
4 for(auto row:rows)
5 {
6 excel_list.append(row.toList());
7 }
4.2 大数据写入
以QList<QList<QVariant>>存储,需要限定范围
QAxObject *user_rang = this->sheet->querySubObject("Rang(const QString&)", "A1:D100");
写入数据
rang->setProperty("Value", var);
4.3 简单的范例
1 // HRESULT r = OleInitialize(0);2 // if(r != S_OK && r != S_FALSE)3 // {4 //qWaring("Qt:初始化Ole 失败(error %x)", (unsigned int)r);5 //}6 QString filename = "e:/123.xlsx"; //具体路径7 QFile file(filename);8 bool isExit = file.exists();9 if(!isExit)
10 return false;
11 qDebug()<<"isExit"<<isExit;
12 qDebug()<<filename;
13 QAxObject *excel = new QAxObject("Excel.Application");
14 excel->dynamicCall("SetVisible(bool Visble)", "false");
15 excel->setProperty("DisplayAlerts", false);
16 QAxObject *workbooks = excel->querySubObject("WorkBooks");
17 QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", filename);
18 QAxObject *worksheets = workbook->querySubObject("Sheets");
19 QAxObject *worksheet = worksheets->querySubObject("Item(int)", 1);
20
21 //写入到指定位置
22 QAxObject *workrang = worksheet->querySubObject("Cells(int, int)", 5, 1);
23 //不能这么存
24 workrang->dynamicCall("SetValue(const QString&)", QString("1ssssssfffssssssssssssssssssssssssssssss10987654321"));
25
26
27 //读取出来并打印
28 QAxObject *workrang1 = worksheet->querySubObject("Cells(int,int)", 3, 5);
29
30 QVariant var = workrang1->dynamicCall("Value");
31 qDebug()<<var;
32 qDebug()<<var.toDouble();
33
34 //另存保存
35 //workbook->dynamicCall("SaveAs(const QString&)",
36 // QDir::toNativeSeparators(filename));
37
38 workbook->dynamicCall("Save()", true);
39 //关闭文件
40 workbook->dynamicCall("Close(Boolean)", true);
41 excel->dynamicCall("Quit()");
42 delete excel;
43 excel = NULL;
44 // OleUninitialize();
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Qt excel 操作使用说明相关推荐
- Qt Excel操作
Qt Excel操作 简单介绍 其他库 基础操作 添加模块 相关代码 遇到的坑 简单介绍 最近在写一个小工具涉及到了Excel操作,顺便学习记录一下.文章内使用的是Windows系统的ActiveX对 ...
- Qt之excel 操作使用说明
学习背景: 适合熟悉些qt开发,但是不是深入了解的开发者学习.具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正! 一.简单介绍 QAx ...
- Qt QAxObject操作excel文件过程总结
最近由于需要Qt来操作Excel文件,所以想把QAxObject用起来,此次使用也是机缘巧合,记录了一下心路历程. 此前走了很多弯路,希望做同样事情的人就别纠缠于同样的错误就好. 配制方面: 1.确保 ...
- Qt之操作Excel
Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...
- Excel操作类-CSpreadSheet and BasicExcel
Excel操作类-CSpreadSheet and BasicExcel CSpreadSheet - A Class to Read and Write to Excel and Text Deli ...
- Fintech系列(三) -- python对excel操作模块汇总||推荐指数||用法示例
python对excel操作模块汇总||推荐指数||用法示例 Working with Excel Files in Python 总览 读写Excel的python第三方开源模块 Excel写操作插 ...
- python数据分析报告的格式_Python数据报表之Excel操作模块用法分析
本文实例讲述了Python数据报表之Excel操作模块用法.分享给大家供大家参考,具体如下: 一 点睛 Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数 ...
- python处理excel表格实例-通过实例学习Python Excel操作
这篇文章主要介绍了通过实例学习Python Excel操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.python 读取Excel # -* ...
- python与excel做数据可视化-Python的Excel操作及数据可视化
Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...
最新文章
- Bootstrap4.x 新增
- STM32 KEIL中 负数绝对值处理
- 赠书:分布式系统中的监控怎么做?
- C# Keywords - as
- 程序员面试——C++工程师面试大全第一部分
- ORA-27101: shared memory realm does not exist 错误的处理(ORA-01034 - Oracle not available )
- Android java和C的Socket通信demo(可用)
- macOS平台安装metasploit
- C语言输出一个19行实心菱形,C语言打印菱形
- Photoshop技能167个经典的Photoshop技巧大全
- 渔翁、魔鬼和四色鱼的故事
- 完整版一元稀疏多项式计算器
- Java获取时间格式(年月日时分秒毫秒)
- 马氏快速记星座法——5分钟快速记忆星座和月份!超快!超准!超实用!
- 网络爬虫---用urllib模块爬取京东笔记本电脑的数据、并对其做一个可视化
- PCL点云库(Point Cloud Library)简介
- 问题:Traceback (most recent call last): File “D:/xiangmu/python/test/test1.py“, line 100, in <module
- 上传文件和上传文件的后缀名限制
- 买了个新键盘,雷柏V56,也没有个说明书,只好自己写个了。
- 一文搞懂Typescript