Qt数据库应用之实现csv文件转xls

2023年 8月 13日 62.2k 0

目录
  • 一、前言
  • 二、功能特点
  • 三、体验地址
  • 四、效果图
  • 五、相关代码

一、前言

最近又多了个需求就是将csv格式的文件转xls,需求一个接着一个,还好都是真实的需求,而且都是有用的需求,并不是不靠谱的需求,不靠谱的需求就比如程序自动识别手机壳颜色自动换背景颜色或者边框颜色色系。csv转xls,因为很多软件或者网页为了跨平台做了极致简单的导出数据形式,那就是csv格式的文本数据,有些用户觉得这种格式用电子表格软件打开后,格式显得很拥挤不好看,所以需要自己的程序能够提供静态函数直接进行转换,里面有多少个字段,转成xls数据后也多少个字段,有多少行内容也就多少行内容,这样打开后就是标准的xls文件,带有一定格式。

之前封装的通用导出函数就支持直接传入数据集合和字段集合导出,所以这个需求的难点及主要工作量就是读取csv文件,取出字段集合和内容集合,最后赋值给数据导出结构体即可。如果是标准的csv文件,那还是很容易读取的,搞个QFile搭配QtextStream以文本流的形式一行行readLine读取,理想很好显示很打脸,自己按照标准csv要求导出的文件可以正常转换,而用户第三方软件导出的csv格式的文件死活无法ok,用记事本打开一看,居然是bom格式,而且里面穿插了非常多的无效空格以及不可见字符\x200B,bom字节也好,不可见字符也好,用普通的QString是打印不出来的,必须转成QByteArray然后再转成16进制字符串就能看到,bom是文本最开始前面三个固定字节0xEF、0xBB、0xBF,只要读取到文件前面存在这三个字节就说明是带bom的文件。

格式搞明白了,代码自然就出来了,通过readLine拿到数据后,传入正则表达式调用remove方法移除不可见字符,这样剩下的就是可见字符,然后判断当前是否读取的是第一行,是第一行则数据分割后传入列名字段名称集合中,其余都是一行行数据,按照要求的分隔符传入队列即可,最后一次性调用静态数据导出函数打完收工,完美!总结:遇到困难要迎难而上,只要功夫深,一定能找到问题所在,尤其是代码写的多了以后,遇到问题会有多种甚至几十种解决办法。

二、功能特点

  • 组件同时集成了导出数据到csv、xls、pdf和打印数据。
  • 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便。
  • 同时支持QTableView、QTableWidget、QStandardItemModel、QsqlTableModel等数据源。
  • 提供静态方法直接传入QTableView、QTableWidget控件,自动识别列名、列宽和数据内容。
  • 每组功能都提供单独的完整的示例,注释详细,非常适合各阶段Qter程序员。
  • 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,支持嵌入式linux。
  • 速度超快,9个字段10万行数据只需要2秒钟完成。
  • 只需要四个步骤即可开始急速导出海量数据比如100W条记录到excel。
  • 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面。
  • 可设置标题、副标题、表名。
  • 可设置导出数据的字段名、列名、列宽。
  • 可设置末尾列自动拉伸填充,默认拉伸更美观。
  • 可设置是否启用校验过滤数据,启用后符合规则的数据特殊颜色显示。
  • 可指定校验的列、校验规则、校验值、校验值数据类型。
  • 校验规则支持 精确等于==、大于>、大于等于>=、小于

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论