一、前言

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

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

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

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

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

Demo示例地址:https://pan.baidu.com/s/1uQsDQO5E5crUBN2J-nPeLQ 提取码:1jkp 名称:bin_dataout.zip

二、功能特点

  1. 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,尤其是支持嵌入式linux。
  2. 10万行数据9个字段只需要2秒钟完成。
  3. 只需要四个步骤即可开始急速导出大量数据到Excel。
  4. 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面。
  5. 可设置标题、副标题、表名。
  6. 可设置字段名称、列宽度。
  7. 可设置是否启用校验过滤数据、校验的列、校验规则、校验值,符合规则的特殊颜色显示。
  8. 可设置随机背景颜色及需要随机背景色的列集合。
  9. 支持分组输出数据,比如按照设备分组输出数据,方便查看。
  10. 可自定义行内容分隔符。
  11. 可追加数据形式写入数据,建议每次追加的数据小于10000条。
  12. 灵活性超高,可自由更改源码设置对齐方式、文字颜色、背景颜色等。
  13. 支持任意excel表格软件,包括但不限于excel2003/2007/2010/2013/2017/wps/openoffice等。
  14. 除了提供导出到Excel类以外,还提供导出到Pdf文件以及打印数据的类。
  15. 注释完善,详细完整的使用demo,支持QTableWidget、QTableView、数据库三种数据源。
  16. 纯Qt编写,支持任意Qt版本+任意编译器+任意系统。

三、效果图

四、使用方法

//第一步:设置文件路径,标题等信息;
QList<QString> columnNames;
QList<int> 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编写数据导出到Excel及Pdf和打印数据的更多相关文章

  1. Qt中将QTableView中的数据导出为Excel文件

    如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...

  2. 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel

    机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...

  3. struts2结合poi-3.7实现数据导出为excel

    我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来 ...

  4. 学习笔记 DataGridView数据导出为Excel

    DataGridView数据导出为Excel   怎样把WinForm下的“DGV”里的绑定数据库后的数据导出到Excel中. 比如:在窗体里有个一“DGV”,DataGridView1,绑定了数据源 ...

  5. 将C1Chart数据导出到Excel

    大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...

  6. vb.net-三种将datagridview数据导出为excel文件的函数

    第一种方法较慢,但是数据格式都比较好,需要引用excel的 Microsoft.Office.Interop.Excel.dll  office.dll #Region "导出excel函数 ...

  7. 数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

    using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...

  8. 数据导出到Excel中

    自己修改后的一个数据导出到Excel的方法,粘出来与大家共享. 只需要将             System.Web.HttpContext.Current.Response.Charset =   ...

  9. asp.net将数据导出到excel

    本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...

随机推荐

  1. Selenium常用API的使用java语言之6-WebDriver常用方法

    前面我们已经学习了定位元素, 定位只是第一步, 定位之后需要对这个元素进行操作, 或单击(按钮) 或 输入(输入框) , 下面就来认识这些最常用的方法. 1.WebDriver 常用方法 下面先来认识 ...

  2. 洛谷P2577 午餐【贪心】【线性dp】

    题目:https://www.luogu.org/problemnew/show/P2577 题意:n个人每个人有一个打饭时间和吃饭时间,将他们分成两个队伍.每个人打到饭之后就马上去吃饭.问怎么安排可 ...

  3. day 50 jquary 终极版本

    jQuary 一.jquary对象和dom对象 jquary找到的标签对象成为-- jquary对象 原生js找到的标签对象成为 -- dom对象 dom对象只能使用dom对象的方法,不能使用jque ...

  4. 洛谷 P3627 [APIO2009]抢掠计划 题解

    Analysis 建图+强连通分量+SPFA求最长路 但要保证最后到达的点中包含酒馆 虽然思路并不难想,但要求的代码能力很高. #include<iostream> #include< ...

  5. Linux gdb分析core dump文件

    文章目录1. coredump1.1 coredump简介1.2 coredump的文件存储路径1.3 coredump产生的条件1.4 coredump产生原因2. 测试生成coredump1. c ...

  6. 004_Python3 注释

    确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释:Python中单行注释以 # 开头,例如::# 这是一个注释print("Hello, Worl ...

  7. html5文件夹上传源码

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  8. Elasticsearch-head使用及ES相关概念

    elasticsearch-head安装和介绍已在上一篇讲了. 在浏览器访问http://localhost:9100,可看到如下界面,表示启动成功: 仔细观察,我们会发现客户端默认连接的是我们ela ...

  9. 使用DOS命令将类库封装成dll

    1.Windows键+R.输入cmd进入DOS 2.使用 cd  加路径找到需要封装成dll的类库文件 3.csc /target:library /out:dll的名字.DLL 需要封装的cs文件

  10. (转)外网如何访问docker容器

    借鉴:https://blog.csdn.net/lvshaorong/article/details/69950694 Docker容器非常轻量,系统开销非常少,比VMware或者VirtualBo ...