qtxlsx读写 excel
系列文章目录
Qt 读取Excel表格数据 生成Excel表格并写入数据
文章目录
- 系列文章目录
- 前言
- 一、QtXlsx的编译
- 二、使用步骤
- 1.引入库
- 2.读数据
- 3. 写数据
前言
相较于QAxObject读写excel,qtxlsx的使用更方便,而且不会因为excel驱动的问题导致读取失败。
一、QtXlsx的编译
网上关于QtXlsx源码编译库的文章很多,在这不做多余赘述。
二、使用步骤
1.引入库
代码如下(示例):
QT += core gui xlsx // .pro#include <QtXlsx> // xxx.h
2.读数据
代码如下(示例):
//!
void ExcelToSql::read_excel(const QString& path, const QString& tableName, myDateBase& db)
{QXlsx::Document xlsx(path);QXlsx::Workbook *workBook = xlsx.workbook(); int sheetCount = workBook->sheetCount();if(sheetCount < 4) return;bool ok = db.openTransactions(); read_excel_first_page(workBook,tableName,db);read_excel_second_page(workBook,tableName,db);read_excel_third_page(workBook,tableName,db);read_excel_fourth_page(workBook,tableName,db);if(ok) db.commitTransactions();
}//!
void ExcelToSql::read_excel_first_page(QXlsx::Workbook* workBook, const QString& tableName, myDateBase& db)
{int index = 0;QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));//第一个标签页int idx;QString disc;int rowCount = workSheet->dimension().rowCount();rowCount = rowCount > 168 ? 168 :rowCount;for (int i = 1; i <= workSheet->dimension().rowCount(); i++){QXlsx::Cell *cell_A = workSheet->cellAt(i, 1);QXlsx::Cell *cell_B = workSheet->cellAt(i, 2);idx = cell_A->value().toInt();disc = cell_B->value().toString();db.save_disc(tableName,index+idx-1,disc);}
}//!
void ExcelToSql::read_excel_second_page(QXlsx::Workbook *workBook, const QString& tableName, myDateBase& db)
{int index = 168;QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(1));int idx;QString disc;int rowCount = workSheet->dimension().rowCount();rowCount = rowCount > 56 ? 56 :rowCount;for (int i = 1; i <= workSheet->dimension().rowCount(); i++){QXlsx::Cell *cell_A = workSheet->cellAt(i, 1);QXlsx::Cell *cell_B = workSheet->cellAt(i, 2);idx = cell_A->value().toInt();disc = cell_B->value().toString();db.save_disc(tableName,index+idx-1,disc);}
}
//!
void ExcelToSql::read_excel_third_page(QXlsx::Workbook *workBook, const QString& tableName, myDateBase& db)
{int index = 224;QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(2));int idx;QString disc;int rowCount = workSheet->dimension().rowCount();rowCount = rowCount > 1 ? 1 :rowCount;for (int i = 1; i <= rowCount; i++){QXlsx::Cell *cell_A = workSheet->cellAt(i, 1);QXlsx::Cell *cell_B = workSheet->cellAt(i, 2);idx = cell_A->value().toInt();disc = cell_B->value().toString();db.save_disc(tableName,index+idx-1,disc);}
}
//!
void ExcelToSql::read_excel_fourth_page(QXlsx::Workbook *workBook, const QString& tableName, myDateBase& db)
{int index = 225;QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(3));int idx;QString disc;int rowCount = workSheet->dimension().rowCount();rowCount = rowCount > 48 ? 48 :rowCount;for (int i = 1; i <= workSheet->dimension().rowCount(); i++){QXlsx::Cell *cell_A = workSheet->cellAt(i, 1);QXlsx::Cell *cell_B = workSheet->cellAt(i, 2);idx = cell_A->value().toInt();disc = cell_B->value().toString();db.save_disc(tableName,index+idx-1,disc);}
}
3. 写数据
void DiscToExcel::work(const QString& path, const QString& ipv4_1, const QString& ipv4_2)
{QString fileName = path.split("/").last();myDateBase db;auto tableName = db.getTabelName_Disc(fileName,ipv4_1,ipv4_2);if(tableName.isEmpty()) return;//QXlsx::Document xlsx;//QXlsx::Format format;format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);format.setVerticalAlignment(QXlsx::Format::AlignVCenter);QXlsx::Workbook *workBook = xlsx.workbook();workBook->addSheet("IO"); //设置页脚名workBook->addSheet("TCMS_to_本车LCU");workBook->addSheet("本车LCU_to_TCMS");workBook->addSheet("LCU_to_LCU");int idx;QString disc;QString sql = QString("select idx,disc from %1").arg(tableName);QSqlQuery query;query.exec(sql);while(query.next()){idx = query.record().value("idx").toInt();disc = query.record().value("disc").toString();addOne(idx,disc,xlsx);}xlsx.saveAs(path);
}void DiscToExcel::addOne(const int& idx, const QString& disc, QXlsx::Document& xlsx)
{QXlsx::Format format;format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);format.setVerticalAlignment(QXlsx::Format::AlignVCenter);if(idx < 168){xlsx.selectSheet("IO"); //根据页脚名选择页xlsx.write(idx+1,1,idx+1,format);xlsx.write(idx+1,2,disc,format);}else if(idx < 224){xlsx.selectSheet("TCMS_to_本车LCU");xlsx.write(idx+1-168,1,idx+1-168,format);xlsx.write(idx+1-168,2,disc,format);}else if(idx < 225){xlsx.selectSheet("本车LCU_to_TCMS");xlsx.write(idx+1-224,1,idx+1-224,format);xlsx.write(idx+1-224,2,disc,format);}else if(idx < 273){xlsx.selectSheet("LCU_to_LCU");xlsx.write(idx+1-225,1,idx+1-225,format);xlsx.write(idx+1-225,2,disc,format);}
}
qtxlsx读写 excel相关推荐
- QtXlsx 读写 excel
Qt 之 QAxObject 读写 excel 如何配置 QtXlsx 的两种方法 要使用QtXlsx ,需要引入这个模块,不然是用不了的,引入方法,在工程 pro 文件中加入 QT += xlsx ...
- qt 使用qtxlsx 读写excel
https://github.com/dbzhang800/QtXlsxWriter 下载qtxlsx地址 QtXlsx is a library that can read and write Ex ...
- 一文搞定Qt读写excel以及qt读写xml数据
一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...
- Qtxlsx操作Excel之使用
相关连接: (1).QAxObject的使用方法:https://zhangzc.blog.csdn.net/article/details/106213607 (2).Qtxlsx库的环境配置:ht ...
- Qt4 Linux下读写excel
背景 最近项目中涉及到excel的读写,因为是在Linux上操作,而且是Qt4的版本,所以相对有些麻烦.之前我们用的是直接通过python去读写excel,把数据存储到中间文件.然后读中间文件进行操作 ...
- qt 编译的时候把源文件复制到编译目录_[QT]读写Excel
C++读写Excel有许多开源库,下边这个连接有总结: troldal/OpenXLSXgithub.com 因为工作需要QT,所以今天我们共同学习一下QT读写Excel.用到的开源库: https ...
- QXlsx读写Excel表格
QXlsx读写Excel表格 1.下载qtxlsxwriter 下载链接 2.将src文件夹下的xlsx放到你的项目中 3.项目文件.pro中添加 include(../xlsx/qtxlsx.pri ...
- NPOI读写Excel
1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...
- .NET读写Excel工具Spire.Xls使用(1)入门介绍
原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...
- 数据分析从零开始实战,Pandas读写Excel/XML数据
点击查看第一篇文章: 数据分析从零开始实战,Pandas读取HTML页面+数据处理解析_ 数据分析 从零开始到实战,Pandas读写CSV数据_ 数据分析 从零开始到实战,Pandas读写CSV数据 ...
最新文章
- RAC8——scan ip的理解
- 完美解答35K月薪的MySQL面试题(三)MySQL是如何实现事务的?
- php curl和file get,PHP cURL与file_get_contents
- 基于Java聊天系统设计(含源文件)
- ubuntu 14.04 apache php mysql_Ubuntu 14.04 升级PHP 和 Apache
- 微信支付小年上线“点鞭炮,响优惠”活动 大额提现免费券限时发放
- 《深入浅出DPDK》读书笔记(十一):DPDK虚拟化技术篇(I/O虚拟化、CPU虚拟化、内存虚拟化、VT-d、I/O透传)
- mysql 1.6安装_centos 6.6编译安装nginx1.6.2+mysql5.6.21+php5.6.3.docx
- Dubbo使用_尚硅谷视频学习笔记
- 社交网络影响力最大化
- 【必备知识】摄像机标定基础理论
- FZOJ P2109 【卡德加的兔子】
- SEASKY开源机械键盘 AD PCB 教程
- 第13章 可视化实战
- 避坑:@Around与@Transactional混用导致事务无法回滚
- python图画制作_python语言创意绘画-用python画画
- 高效序列化protobuf和protostuff的区别
- 谈谈学习 --- 我认为的正确的学习姿势
- 郭大侠与Rabi-Ribi (优先队列)
- 线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)
热门文章
- oracle 对象同义词,Oracle数据库对象_同义词
- java 16进制 负数_Java随笔:小心16进制负数
- 学前端好还是后端好?
- c语言怎么写最小公倍数的函数,C语言 · 最小公倍数
- 太阳方位角 matlab,太阳天顶角与太阳方位角计算软件V4.1及源码
- 使用Cesium的 Material (材质)绘制警戒线
- 搜狗状告腾讯拼音输入法不正当竞争索赔2051万
- word排版案例报告_Word操作技巧:图文混排,就是这么简单
- web前端面试(1) 前端缓存怎么做?
- make headers_install 用法