【开发记录】利用QT读取Excel并写入数据

发布于:2023-01-21 ⋅ 阅读:(4342) ⋅ 点赞:(4)

再次梳理一下自己近期的工作内容。

上一篇:【开发记录】基于C++,使用QT+VS编写软件_Masec的博客-CSDN博客_c++如何开发软件自己记录一下编写QT软件的过程和心得https://blog.csdn.net/yourgreatfather/article/details/125807684?spm=1001.2014.3001.5502

我根据需求(把公司外部采购的物料填入料号登记表)开发了一个简单的QT界面。

正如我上文所说,我完全是从一句话的需求产生了软件,这里成为1.0版本吧。

1.0版本只能保存.csv格式到本地,根本与实际的需求相去甚远。

而实际的需求是要按照固定格式,保存在.xlsx的excle文件中,而且这个文件为了防止误编辑还设置了访问密码

 根据实际的需求,我开发了V2.0软件。

图1 V2.0软件界面

V2.0软件界面如图1所示,用汽车界的洋气语言,V2.0界面的设计沿用了V1.0的设计语言(血统)😓。 

 图2 V1.0软件界面

和第一次一样,还是随手记录了开发日志,方便自己回忆和记录踩到的坑。

2022.7.21
1. 完成对Ui界面的扩展重建
2. 完成软件基本功能


目前使用的libXL破解方案
3.8.X的库 加 3.6.X的64为lib.dll编译文件
配合set key

开发待实现功能:
1.遍历料号所在列, pushback到QString List中,查重(已实现)
2.外购件可以带颜色保存。 【是否需要?】
3.按照不同部件冻结软件不同的表格,让用户更加明确 【首先需要明确每种外购件需要保持哪些数据】
4.写一个父类,用来保存有共同属性的外购件。 针对不同的外购件继承这个父类?

2022.7.22
1.优化:通过按照sheet的名字来与下拉框对应,而不是索引号,(避免表单顺序错乱而造成写入错误)
  遇坑:R6025 PURE VIRTUAL FUNCTION CALL

待实现
1. 用户没有选定excel地址之前,不允许用户输入内容or点选(实现)

bug
写过内容的行,再手动删除,程序认为是有内容的行??

新需求:
与G2文档联动: G2的格式要求??(带边框,写入颜色?)
想法:界面新增用户输入内容, G2分类作为下拉列表 单位作为下拉列表 Make or Buy 均为buy(because 外购件)
可能的坑:带框但是没有内容的行,可能会认为是有内容的行。 考虑使用EMPTY进行判断。

与采供清单联动,通过采供清单同时把外购件的BOM清单生成到G2表格的sheet中。

 V2.0开发,牵扯到要读取本地excel文件。通过网上的资料查找,我定位到了xLib这个库,官网地址:C++ Excel Library to read/write xls/xlsx files - LibXL

说一下使用感受:

1.优点:xLib是有人维护的专业商业库,因此功能全面,迭代快,文档清晰,使用便捷。

2.缺点:收费。当然他人的劳动成果需要尊重,知识产权需要保护,收费不是原罪。但是,因为我的软件第一小范围内使用,不会用于外部;第二,不会用于商业发行;第三,公司没有打算给我买正版🤭。在写第二版软件的时候,不得不承认,我利用了破解版的库和key。这样的风险就是给公司带来了合规性的风险。也是隐患。

3.缺点2:这也是导致我最终弃用这个库的原因,那就是不能打开带有密码的excel文件。这直接背离了我的需求。

再说说V2.0 版开发过程中遇到的坑。

在设计ui界面时,V2.0大量使用了布局,基本上是水平布局套垂直布局套水平布局……

最后在代码中确定具体位置时,出现了部分组件不能修改位置的问题,如图3红框所示。(其实是自己水平不足)

图3 v2.0软件遇到的坑 

最终软件可以实现对无密码excel文件读写。将用户在界面中输入的信息保存在对应位置。

与同事展示后,同事提出了新的需求,可否一次性完成料号登记表、G2以及销售采购BOM表格填写,继续方便、简化工作?

根据这个需求,我开始构思V3.0版本软件。

3.0需要解决的第一个问题,就是需要访问带密码的excel文件。

通过求助朋友,最终目光落在了xlnt开源库中:GitHub - tfussell/xlnt: Cross-platform user-friendly xlsx library for C++11+

对比商业库,优缺点也显而易见。

无非就是开源库不存在合规性的隐患;同样的,库的完善没有那么快,需要自己编译源码,以及作者的说明文档大部分内容还是空白。好在已经有很多前辈踩过坑,我也找了很多博客做参考。终于是将xlnt使用了起来。

v3.0软件界面如图4所示:

 

 

 图4 v3.0软件界面

这次因为需要访问带密码的excel,我设计了一个用户登录界面。界面中需要用户首先输入正确的excel密码作为登陆密码,逻辑就是知道密码的的用户才能访问我的软件,才能通过软件修改本地excel。

同样的,v3.0还是功能扩展,一样的设计语言。

v3.0的开发日志:

2022.7.28
【踩坑】QTCreater中加了语言之后,vs找不到.pm文件
【踩坑】VS打不开ui文件,解决方法:https://blog.csdn.net/dengjin20104042056/article/details/122160103
1.已完成新的UI界面设计;
2.部件的定位,是否可以设定int x = 0, y = 0. 每个部件在(x,y)上增加对应的数值?

2022.8.9
引入新的excel库 xlnt. 待学习库功能。

很长的QString换行问题:https://blog.csdn.net/weixin_44954996/article/details/125514405
逻辑:用户未填写G2前,禁止用户保存料号

【踩坑】引入头文件的顺序很重要

8.9 号完成工作: 配置好了xlnt库,测试了xlnt的基本操作,包括打开带密码保护的excel文件。
将xlnt引入QT程序。
8.10 号计划完成软件的基本功能。

8.10 软件基本功能完成
保存格式待优化。
增加边框+居中显示
考虑优化内容:增加一个显示用户选择的地址label
考虑增加内容:用户登录界面,需要用户输入正确的密码才能使用该软件。

8.11 完成了用户登录界面的跳转工作
【踩坑】 带密码保存之后无法再次打开excel
【踩坑2】 G2文件无法保存?------- 因为格式设置问题?? 会把表格“炸裂”

现在遇到的坑是,这个开源库貌似不能继续带密码保存excel……保存的excel文件无法再次打开。

第二个坑,就是需要设置保存时G2部分用户输入的内容按紫色写入excel。格式问题还没有参透。


网站公告

今日签到

点亮在社区的每一天
去签到