Qt Excel进行新增、删除、修改读取从入门到精通
配置xxx.pro
引入Active Qt库
QT += axcontainer
引入objbase.h,解决返回QAxObject为空的问题
1 #include <objbase.h>
2
3 //在需要创建QAxObject()上方调用如下代码
4 CoInitializeEx(NULL, COINIT_MULTITHREADED);
5 m_pExcel = new(std::nothrow) QAxObject();
因为QAxObject默认是在单线程下使用的,因此如果不用上门代码申明多线程, 会导致获取的excel的QAxObject都是NULL
保存或者打开excel的路径需要统一用"\"
用QDir::toNativeSeparators(m_strPath)进行转换
m_pWorkbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(m_strPath));
SaveAs必须在所有操作结束后调用,否则不会保存到excel中
可以放到close前调用即可
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
1 m_pWorkbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(m_strPath));
2 m_pWorkbook->dynamicCall("Close()");
3 m_pExcel->dynamicCall("Quit()");
4 delete m_pExcel;
5 m_pExcel = NULL;
Demo
1 #ifndef EXCELOPERATOR_H2 #define EXCELOPERATOR_H3 4 #include <QObject>5 #include <ActiveQt/QAxObject>6 #include <QDebug>7 #include <QDir>8 9 class ExcelOperator : public QObject
10 {
11 Q_OBJECT
12 public:
13 explicit ExcelOperator(QObject *parent = nullptr);
14 ~ExcelOperator();
15 //打开文件
16 bool open(QString path);
17 //关闭文件
18 bool close();
19 //获取工作表数量
20 int getSheetsCount();
21 //根据名称创建工作表
22 QAxObject* addSheet(QString name);
23 //根据名称删除工作表
24 bool delSheet(QString name);
25 //根据编号删除工作表
26 bool delSheet(int index);
27 //根据名称获取工作表
28 QAxObject* getSheet(QString name);
29 //根据编号获取工作表
30 QAxObject* getSheet(int index);
31 //获取行对象
32 QAxObject* getRows(QAxObject* pSheet);
33 //获取行数
34 int getRowsCount(QAxObject* pSheet);
35 //获取列对象
36 QAxObject* getColumns(QAxObject* pSheet);
37 //获取列数
38 int getColumnsCount(QAxObject* pSheet);
39 //根据行列值获取单元格值, 如: 3行,5列
40 QString getCell(QAxObject* pSheet, int row, int column);
41 //根据行列编号获取单元格值, 如: "F6"
42 QString getCell(QAxObject* pSheet, QString number);
43 //根据行列值设置单元格值
44 bool setCell(QAxObject* pSheet, int row, int column, QString value);
45 //根据行列编号设置单元格值
46 bool setCell(QAxObject* pSheet, QString number, QString value);
47
48
49 signals:
50
51 public slots:
52 private:
53 QAxObject* m_pExcel;
54 QAxObject* m_pWorksheets;
55 QAxObject* m_pWorkbook;
56 QString m_strPath;
57 };
58
59 #endif // EXCELOPERATOR_H
1 #include "exceloperator.h"2 #include <objbase.h>3 4 ExcelOperator::ExcelOperator(QObject *parent) : QObject(parent)5 , m_pExcel(NULL)6 , m_pWorksheets(NULL)7 , m_pWorkbook(NULL)8 {9 10 }11 12 ExcelOperator::~ExcelOperator()13 {14 close();15 }16 17 bool ExcelOperator::open(QString path)18 {19 m_strPath = path;20 QAxObject *pWorkbooks = NULL;21 CoInitializeEx(NULL, COINIT_MULTITHREADED);22 m_pExcel = new(std::nothrow) QAxObject();23 if (NULL == m_pExcel) {24 qCritical()<<"创建Excel对象失败...";25 return false;26 }27 try {28 m_pExcel->setControl("Excel.Application");29 m_pExcel->dynamicCall("SetVisible(bool)", false); //true 表示操作文件时可见,false表示为不可见30 m_pExcel->setProperty("DisplayAlerts", false);31 pWorkbooks = m_pExcel->querySubObject("WorkBooks");32 pWorkbooks->dynamicCall("Add");33 m_pWorkbook = m_pExcel->querySubObject("ActiveWorkBook");34 qDebug()<<"excel path: "<<m_strPath;35 36 // 获取打开的excel文件中所有的工作sheet37 m_pWorksheets = m_pWorkbook->querySubObject("WorkSheets");38 } catch (...) {39 qCritical()<<"打开文件失败...";40 return false;41 }42 43 return true;44 }45 46 bool ExcelOperator::close()47 {48 qDebug()<<"excel close...";49 if (m_pExcel)50 {51 qDebug()<<"closing...";52 m_pWorkbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(m_strPath));53 m_pWorkbook->dynamicCall("Close()");54 m_pExcel->dynamicCall("Quit()");55 delete m_pExcel;56 m_pExcel = NULL;57 }58 return true;59 }60 61 int ExcelOperator::getSheetsCount()62 {63 int count = 0;64 count = m_pWorksheets->property("Count").toInt();65 return count;66 }67 68 69 QAxObject* ExcelOperator::addSheet(QString name)70 {71 QAxObject *pWorkSheet = NULL;72 try {73 int count = m_pWorksheets->property("Count").toInt(); //获取工作表数目74 QAxObject *pLastSheet = m_pWorksheets->querySubObject("Item(int)", count);75 pWorkSheet = m_pWorksheets->querySubObject("Add(QVariant)", pLastSheet->asVariant());76 pLastSheet->dynamicCall("Move(QVariant)", pWorkSheet->asVariant());77 pWorkSheet->setProperty("Name", name); //设置工作表名称78 } catch (...) {79 qCritical()<<"创建sheet失败...";80 }81 return pWorkSheet;82 }83 84 bool ExcelOperator::delSheet(QString name)85 {86 try {87 QAxObject *pFirstSheet = m_pWorksheets->querySubObject("Item(QString)", name);88 pFirstSheet->dynamicCall("delete");89 } catch (...) {90 qCritical()<<"删除sheet失败...";91 return false;92 }93 return true;94 }95 96 bool ExcelOperator::delSheet(int index)97 {98 try {99 QAxObject *pFirstSheet = m_pWorksheets->querySubObject("Item(int)", index);
100 pFirstSheet->dynamicCall("delete");
101 } catch (...) {
102 qCritical()<<"删除sheet失败...";
103 return false;
104 }
105 return true;
106 }
107
108 QAxObject* ExcelOperator::getSheet(QString name)
109 {
110 QAxObject* pWorkSheet = NULL;
111 try {
112 pWorkSheet = m_pWorksheets->querySubObject("Item(QString)", name);
113 } catch (...) {
114 qCritical()<<"获取sheet失败...";
115 }
116 return pWorkSheet;
117 }
118
119 QAxObject* ExcelOperator::getSheet(int index)
120 {
121 QAxObject* pWorkSheet = NULL;
122 try {
123 pWorkSheet = m_pWorksheets->querySubObject("Item(int)", index);
124 } catch (...) {
125 qCritical()<<"获取sheet失败...";
126 }
127 return pWorkSheet;
128 }
129
130 QAxObject* ExcelOperator::getRows(QAxObject* pSheet)
131 {
132 QAxObject* pRows = NULL;
133 try {
134 pRows = pSheet->querySubObject("Rows");
135 } catch (...) {
136 qCritical()<<"获取行失败...";
137 }
138 return pRows;
139 }
140
141 int ExcelOperator::getRowsCount(QAxObject* pSheet)
142 {
143 int rows = 0;
144 try {
145 QAxObject* pRows = getRows(pSheet);
146 rows = pRows->property("Count").toInt();
147 } catch (...) {
148 qCritical()<<"获取行数失败...";
149 }
150 return rows;
151 }
152
153 QAxObject* ExcelOperator::getColumns(QAxObject* pSheet)
154 {
155 QAxObject* pColumns = NULL;
156 try {
157 pColumns = pSheet->querySubObject("Columns");
158 } catch (...) {
159 qCritical()<<"获取列失败...";
160 }
161 return pColumns;
162 }
163
164 int ExcelOperator::getColumnsCount(QAxObject* pSheet)
165 {
166 int columns = 0;
167 try {
168 QAxObject* pColumns = getColumns(pSheet);
169 columns = pColumns->property("Count").toInt();
170 } catch (...) {
171 qCritical()<<"获取列数失败...";
172 }
173 return columns;
174 }
175
176 QString ExcelOperator::getCell(QAxObject* pSheet, int row, int column)
177 {
178 QString strCell = "";
179 try {
180 QAxObject* pCell = pSheet->querySubObject("Cells(int, int)", row, column);
181 strCell = pCell->property("Value").toString();
182 } catch (...) {
183 qCritical()<<"获取单元格信息失败...";
184 }
185
186 return strCell;
187 }
188
189 QString ExcelOperator::getCell(QAxObject* pSheet, QString number)
190 {
191 QString strCell = "";
192 try {
193 QAxObject* pCell = pSheet->querySubObject("Range(QString)", number);
194 strCell = pCell->property("Value").toString();
195 } catch (...) {
196 qCritical()<<"获取单元格信息失败...";
197 }
198
199 return strCell;
200 }
201
202 bool ExcelOperator::setCell(QAxObject* pSheet, int row, int column, QString value)
203 {
204 try {
205 QAxObject* pCell = pSheet->querySubObject("Cells(int, int)", row, column);
206 pCell->setProperty("Value", value);
207 } catch (...) {
208 qCritical()<<"写入单元格信息失败...";
209 return false;
210 }
211 return true;
212 }
213
214 bool ExcelOperator::setCell(QAxObject* pSheet, QString number, QString value)
215 {
216 try {
217 QAxObject* pCell = pSheet->querySubObject("Range(QString)", number);
218 pCell->setProperty("Value", value);
219 } catch (...) {
220 qCritical()<<"写入单元格信息失败...";
221 return false;
222 }
223 return true;
224
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Qt Excel进行新增、删除、修改读取从入门到精通相关推荐
- NPOI对Excel数据的读取删除修改写入
文章目录 前言介绍 npoi介绍 1.读取excel数据 1.1 读取sheet表 1.2 获取sheet数据 2.删除excel 2.1 删除sheet表 2.2 清空指定行数据 3.修改excel ...
- C#xml创建修改读取删除帮助类XmlHelper.cs
<strong><span style="color:#ff0000;">[XML帮助类]C#xml创建修改读取删除帮助类XmlHelper.cs < ...
- 删除 多个表_合并汇总多个工作簿多个工作表,删除修改新增更新内容只需刷新...
要求:1.把多个工作簿的多个工作表内容合并汇总 2.后续在任一工作表内删除修改新增内容,无需再重新做表 3.后续在任一工作簿中新增一个或多个工作表,无需再重新做表 4.后续在文件夹中添加一个或多个Ex ...
- Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)
Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录
- form 多条数据 只保存修改的行_MVC中的新增、修改、删除
新增.修改.删除 开发工具与关键技术:MVC作者:盘洪源撰写时间:2019年3月30日星期六 新增.删除.修改.查询这都是MVC中最基础的,所以说想要学好MVC必须先把基础打好,查询是比较复杂点,这里 ...
- laravel 调试mysql_Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)...
五.新增.修改.删除操作 在前文中我介绍了如何使用Query Builder(查询构造器)进行数据查询,下面接着介绍如何使用它进行数据的增.删.改操作.同样假设我们有如下用户表(user): 1,新增 ...
- c223 :production versions 新增、修改、删除函数: CM_FV_PROD_VERS_DB_UPDATE
c223 :production versions 新增.修改.删除函数: CM_FV_PROD_VERS_DB_UPDATE
- 使用Elasticsearch第三方包Bboss批量提交新增、修改、删除请求
思路 使用Bboss的Http请求,核心还是ES原生的http请求接口,自己懒得写,直接使用Bboss封装好的 maven依赖 <dependency><groupId>com ...
- vue-axios demo_user 展示数据 删除 修改 新增
项目 1. https://gitee.com/zhao-qing-jing/ssmpro2104-jt/tree/master/d-mvc https://gitee.com/zhao-qing-j ...
最新文章
- Homebrew正式支持苹果M1,程序员换新Mac又多了一条理由
- oracle sqlcode 多条,SQL查询以连接Oracle中多个行的列值
- db2界面调用存储过程_第三章 操作系统用户界面
- abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢
- [Leetcode][第97题][JAVA][交错字符串][BFS][动态规划]
- 【机器学习】sklearn k-近邻算法
- 神舟笔记本风扇控制软件_十代酷睿+RTX2070加持 高性能游戏本首选神舟战神G9CU7PK...
- 算法竞赛入门 第2版 习题3-3 UVa1225
- 如何生成随机的字母数字字符串?
- SpringBoot-项目2-收货地址(新增,修改,删除,设为默认收货地址)
- Unity资源的基本类型
- 为何提示网站安全证书有问题?不同原因下,如何解决?
- python xlrd pandas_Python:Pandas pd.read_excel提供ImportError:为Excel supp安装xlrd = 0.9.0
- python编写库存管理_python编写商品管理
- 李沐论文精度系列之八:视频理解论文串讲
- 关于日期插件在chrome中出现被遮挡的问题
- php随机产生4乘4矩阵,matlab函数rand:产生均匀分布的随机数或矩阵的函数
- 网宿科技边缘计算之直播应用
- 微信小程序关键字搜索
- Pytorch实战2:Carvana Image Masking使用UNet
热门文章
- python分割文本_切分文本Python
- 雨林木风发布 Windows一键还原 2011 v1.5.5.6
- GCN学习:用PyG实现自定义layers的GCN网络及训练(五)
- [奥塔在线]IIS Express如何开启HTPPS访问
- java lang arithmetic,java.lang.ArithmeticException
- mac 安装软件报错
- 秋意浓(2018.9.28)
- IIS发布问题:HTTP错误404.17和404.2
- 0003 渗透测试标准
- 装饰工程预算方案的审查