一、前言

用Qt开发已经九年了,期间用Qt做过不少的项目,在各种项目中有个功能很常用,尤其是涉及到数据记录存储的项目,那就是需要对查询的数据进行导出到Excel,或者导出到Pdf文件,或者直接打印查询的数据,其中导出数据到Excel最常见,基本上有三种方法。

方法一使用QAxObject,小数据量还可以,数据量一大直接懵逼,性能指数级下降,而且不支持跨平台,只能在WIN上玩一玩,对于大量的linux开发者来说,直接废了。

方法二使用第三方开源的QtXlsx,这个做的还是可以,使用人群也比较多,据说不依赖office组件跨平台的,缺点就是不支持xls格式,只支持高版本的xlsx,使用稍微比较繁琐,用户更多的需要的是直接一个函数传入对应的数据即可,越简单越好。

方法三使用csv格式作为导出数据,纯文本的数据存储格式,默认逗号作为分隔符,也可以指定其他符号作为分隔符,csv格式也是各种表格软件都支持的格式,相当轻便,作为各大系统或者平台和编程语言之间交互数据还是非常方便的,很多工业控制领域的软件都会采用这种格式,缺点就是太简单了,不能分组或者指定过滤条件特殊颜色显示等。

在对比了三种方式以后,决定自己造个轮子,主要是为了自身项目的需要写的,后面慢慢的客户需求多了,增加了通用常用场景的数据导出需求,目标要求至少包含三点:速度够快、使用够简洁、不依赖任何组件。

作品大全:https://qtchina.blog.csdn.net/article/details/97565652

二、功能特点

原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,尤其是支持嵌入式linux。

10万行数据9个字段只需要2秒钟完成。

只需要四个步骤即可开始急速导出大量数据到Excel。

同时提供直接写入数据接口和多线程写入数据接口,不卡主界面。

可设置标题、副标题、表名。

可设置字段名称、列宽度。

可设置是否启用校验过滤数据、校验的列、校验规则、校验值,符合规则的特殊颜色显示。

可设置随机背景颜色及需要随机背景色的列集合。

支持分组输出数据,比如按照设备分组输出数据,方便查看。

可自定义行内容分隔符。

可追加数据形式写入数据,建议每次追加的数据小于10000条。

灵活性超高,可自由更改源码设置对齐方式、文字颜色、背景颜色等。

支持任意excel表格软件,包括但不限于excel2003/2007/2010/2013/2017/wps/openoffice等。

除了提供导出到Excel类以外,还提供导出到Pdf文件以及打印数据的类。

注释完善,详细完整的使用demo,支持QTableWidget、QTableView、数据库三种数据源。

纯Qt编写,支持任意Qt版本+任意编译器+任意系统。

三、效果图

四、使用方法

//第一步:设置文件路径,标题等信息;

QList columnNames;

QList columnWidths;

columnNames << "防区号" << "防区名称" << "告警类型" << "告警内容" << "告警时间";

columnWidths << 65 << 100 << 120 << 150 << 180;

QString file = qApp->applicationDirPath() + "/1.xls";

ExcelThread::Instance()->init();

ExcelThread::Instance()->setFileName(file);

ExcelThread::Instance()->setSheetName("告警信息");

ExcelThread::Instance()->setTitle("所有告警信息");

ExcelThread::Instance()->setSubTitle(QString("%1 导出告警信息").arg(DATETIME));

ExcelThread::Instance()->setColumnNames(columnNames);

ExcelThread::Instance()->setColumnWidths(columnWidths);

//第二步:打开文件,启动线程;

ExcelThread::Instance()->open();

ExcelThread::Instance()->start();

//第三步:逐行输入数据;

QStringList list;

list << "防区上线" << "防区离线" << "防区旁路" << "防区报警" << "防区故障";

for (int i = 0; i < logCount; i++) {

int index = qrand() % 4;

QStringList temp;

temp.append(QString::number(i + 1));

temp.append("防区" + QString::number(i + 1));

temp.append("主机上报");

temp.append(list.at(index));

temp.append(DATETIME);

ExcelThread::Instance()->appendContent(temp.join(";"));

}

//第四步:关闭文件,关闭线程;

ExcelThread::Instance()->close();

ExcelThread::Instance()->stop();

qt编写mysql导出excel_Qt编写数据导出到Excel及Pdf和打印数据相关推荐

  1. .net 导出excel_Qt编写的项目作品18-数据导出到Excel及Pdf和打印数据

    一.功能特点 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,尤其是支持嵌入式linux. 10万行数据9个字段只需要2秒钟完成. 只需要四个步骤即可开始急速导出大量数据到Exce ...

  2. Qt编写数据导出到Excel及Pdf和打印数据

    一.前言 用Qt开发已经九年了,期间用Qt做过不少的项目,在各种项目中有个功能很常用,尤其是涉及到数据记录存储的项目,那就是需要对查询的数据进行导出到Excel,或者导出到Pdf文件,或者直接打印查询 ...

  3. r语言 将表格导出为csv_如何将R语言中表格数据输出为Excel文件.pdf

    如何将R 语言中的表格数据输出为Excel 文件 熊荣川 六盘水师范学院生物信息学实验室 xiongrongchuan@126.com /u/Bearjazz 平台的开放性使得R 语言具有了丰富的运算 ...

  4. 如何用Java读取单元格的数据_Java读取Excel中的单元格数据

    目前网上能找到Web平台下的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel ...

  5. matlab将列数据存成excel表格,matlab将列数据存成excel表格-matlab工作区数据怎么转为excel...

    如何将excel中数据导入matlab并存入数组中 直接写 X=xlsread('路径 文件名.xls','你想取出的列'): 例如X=xlsread('c:\数据.xls','a1:b4');就取出 ...

  6. matlab数据变成一列数据,matlab读取excel表格列数据-matlab导入excel后,怎么把数据提取成一列?...

    怎么用matlab读取excel表格中的一列十六进制数据? x=xlsread('oillack.xls','sheet1','a1:a73') excel文件名是oillack.xls,sheet1 ...

  7. Excel - 将 TXT 数据导入到 Excel 中(自动将数据拆分成多列)

    txt文本: 将txt格式里的两列数据复制粘贴导入excel 后全都在同一列. 通过下述操作, 可以将 TXT 数据导入到 Excel 中,并且自动拆分为两列. 数据→从文本

  8. excel数据平均分配给多人_excel表格数据分配-用Excel怎么才能将组数据平均分配给几个人...

    如何用EXCEL快速分配数据? 表格按排序,年龄就按大小排列一样的年龄就一起了. 在表格右侧找一空做序号,1.2.3.4.5.6.7.8.9.10.再继续做1.2.3.....8.9.10,..... ...

  9. vb6 数据自动生成excel文件_Excel随机生成数据

    工作中有时候需要大量数据,而手头没有现成的数据怎么办?,很多小伙伴苦思冥想编写数据,意义不大还累个半死,今天推出两种方法随机生成数据小妙招. 1.用rand函数生成A与B之间的随机数字(A≤随机数≤B ...

  10. java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法

    对于我们来说,java导出数据成excel或其他数据文件,或者下载资源是开发中的家常便饭, 但是在导出的时候,如果点击一个按钮导出几百万条数据,如果不作处理的话很可能会出现一系列的问题. 这里介绍打包 ...

最新文章

  1. 修改anaconda中conda和pip的源为清华源
  2. mysql数据库备份工具expdb,使用expdp完成自动备份数据库案例以及遇到的问题
  3. HihoCoder - 1457 后缀自动机四·重复旋律7(后缀自动机)
  4. 构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型
  5. 命令行操作mysql
  6. c语言如何输入矩阵_如何在 COMSOL 软件中调试外部材料
  7. Win7 单机Spark和PySpark安装
  8. 荣耀20发布会花式官宣:4!-3!+2!伦敦见
  9. mysql-使用存储过程一次性批量创建多张表
  10. 简单实现x的n次方pta_数学学霸的解题思路1“降低次方和次元”
  11. CCF201712-2 游戏(100分)【模拟】
  12. 太牛逼了!自从项目中用了Disruptor之后,性能提升了2.5倍
  13. android 百度地图无法显示,Android Studio中使用百度地图API,不显示地图的问题解决办法...
  14. 数据库 基础 与命令 逻辑思维导图
  15. Alist+KODI打造免费家庭影院
  16. saber与matlab,saber与matlab的比较 (1)
  17. 安卓7.0及以上用户证书导入的问题
  18. 埃森哲java开发怎么样_技术丨埃森哲Data Privacy 、商汤科技、平安科技人工智能(AI)类日常实习...
  19. iView Table合并单元格(行、列)
  20. 中国将成亚太 Linux 枢纽

热门文章

  1. 【火灾检测】基于matlab GUI火灾检测(带面板)【含Matlab源码 1646期】
  2. 【三维路径规划】基于matlab A_star算法无人机山地三维路径规划【含Matlab源码 266期】
  3. 【疫情模型】基于matalb改进的SEIR模型【含Matlab源码 667期】
  4. 【消费量预测】基于matlab碳排放约束下煤炭消费量预测【含Matlab源码 223期】
  5. 【图像变换】基于matalb DIBR-3D图像变换【含Matalb源码 082期】
  6. 青县计算机学校,青县将建设新学校(中小学各一所)今年3月开工,明年即可完工!...
  7. 游戏行业数据类丛书_理论丛书:高维数据101
  8. 推荐一个专业的正则表达试学习网站
  9. java常用类objet,Java基础-常用API-Object类
  10. s查看oracle空间分配,Oracle查看表空间使用率(包括临时表空间)