再次梳理一下自己近期的工作内容。
我根据需求(把公司外部采购的物料填入料号登记表)开发了一个简单的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。格式问题还没有参透。