首页| 论坛| 消息

标题:Qt数据库应用20-csv文件转xls
作者:liudianwu
日期:2022-06-05 10:45
内容:

## 一、前言
最近又多了个需求就是将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方法移除不可见字符,这样剩下的就是可见字符,然后判断当前是否读取的是第一行,是第一行则数据分割后传入列名字段名称集合中,其余都是一行行数据,按照要求的分隔符传入队列即可,最后一次性调用静态数据导出函数打完收工,完美!总结:遇到困难要迎难而上,只要功夫深,一定能找到问题所在,尤其是代码写的多了以后,遇到问题会有多种甚至几十种解决办法。
## 二、功能特点
1. 组件同时集成了导出数据到csv、xls、pdf和打印数据。
2. 所有操作全部提供静态方法无需new,数据和属性等各种参数设置采用结构体数据,极为方便。
3. 同时支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等数据源。
4. 提供静态方法直接传入QTableView、QTableWidget控件,自动识别列名、列宽和数据内容。
5. 每组功能都提供单独的完整的示例,注释详细,非常适合各阶段Qter程 ..


#1 [tanyue.esec 06-05 11:47]
看前言,看的是实现需求的思路。源码虽好,思路更好

回复 发表
主题 版块