系列文章目录

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相关推荐

  1. QtXlsx 读写 excel

    Qt 之 QAxObject 读写 excel 如何配置 QtXlsx 的两种方法 要使用QtXlsx ,需要引入这个模块,不然是用不了的,引入方法,在工程 pro 文件中加入 QT += xlsx ...

  2. qt 使用qtxlsx 读写excel

    https://github.com/dbzhang800/QtXlsxWriter 下载qtxlsx地址 QtXlsx is a library that can read and write Ex ...

  3. 一文搞定Qt读写excel以及qt读写xml数据

    一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...

  4. Qtxlsx操作Excel之使用

    相关连接: (1).QAxObject的使用方法:https://zhangzc.blog.csdn.net/article/details/106213607 (2).Qtxlsx库的环境配置:ht ...

  5. Qt4 Linux下读写excel

    背景 最近项目中涉及到excel的读写,因为是在Linux上操作,而且是Qt4的版本,所以相对有些麻烦.之前我们用的是直接通过python去读写excel,把数据存储到中间文件.然后读中间文件进行操作 ...

  6. qt 编译的时候把源文件复制到编译目录_[QT]读写Excel

    C++读写Excel有许多开源库,下边这个连接有总结: troldal/OpenXLSX​github.com 因为工作需要QT,所以今天我们共同学习一下QT读写Excel.用到的开源库: https ...

  7. QXlsx读写Excel表格

    QXlsx读写Excel表格 1.下载qtxlsxwriter 下载链接 2.将src文件夹下的xlsx放到你的项目中 3.项目文件.pro中添加 include(../xlsx/qtxlsx.pri ...

  8. NPOI读写Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  9. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

  10. 数据分析从零开始实战,Pandas读写Excel/XML数据

    点击查看第一篇文章: 数据分析从零开始实战,Pandas读取HTML页面+数据处理解析_ 数据分析 从零开始到实战,Pandas读写CSV数据_ 数据分析 从零开始到实战,Pandas读写CSV数据 ...

最新文章

  1. RAC8——scan ip的理解
  2. 完美解答35K月薪的MySQL面试题(三)MySQL是如何实现事务的?
  3. php curl和file get,PHP cURL与file_get_contents
  4. 基于Java聊天系统设计(含源文件)
  5. ubuntu 14.04 apache php mysql_Ubuntu 14.04 升级PHP 和 Apache
  6. 微信支付小年上线“点鞭炮,响优惠”活动 大额提现免费券限时发放
  7. 《深入浅出DPDK》读书笔记(十一):DPDK虚拟化技术篇(I/O虚拟化、CPU虚拟化、内存虚拟化、VT-d、I/O透传)
  8. mysql 1.6安装_centos 6.6编译安装nginx1.6.2+mysql5.6.21+php5.6.3.docx
  9. Dubbo使用_尚硅谷视频学习笔记
  10. 社交网络影响力最大化
  11. 【必备知识】摄像机标定基础理论
  12. FZOJ P2109 【卡德加的兔子】
  13. SEASKY开源机械键盘 AD PCB 教程
  14. 第13章 可视化实战
  15. 避坑:@Around与@Transactional混用导致事务无法回滚
  16. python图画制作_python语言创意绘画-用python画画
  17. 高效序列化protobuf和protostuff的区别
  18. 谈谈学习 --- 我认为的正确的学习姿势
  19. 郭大侠与Rabi-Ribi (优先队列)
  20. 线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)

热门文章

  1. oracle 对象同义词,Oracle数据库对象_同义词
  2. java 16进制 负数_Java随笔:小心16进制负数
  3. 学前端好还是后端好?
  4. c语言怎么写最小公倍数的函数,C语言 · 最小公倍数
  5. 太阳方位角 matlab,太阳天顶角与太阳方位角计算软件V4.1及源码
  6. 使用Cesium的 Material (材质)绘制警戒线
  7. 搜狗状告腾讯拼音输入法不正当竞争索赔2051万
  8. word排版案例报告_Word操作技巧:图文混排,就是这么简单
  9. web前端面试(1) 前端缓存怎么做?
  10. make headers_install 用法