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


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

    上一篇:【开发记录】基于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软件界面

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

    1. 2022.7.21
    2. 1. 完成对Ui界面的扩展重建
    3. 2. 完成软件基本功能
    4. 目前使用的libXL破解方案
    5. 3.8.X的库 加 3.6.X的64lib.dll编译文件
    6. 配合set key
    7. 开发待实现功能:
    8. 1.遍历料号所在列, pushback到QString List中,查重(已实现)
    9. 2.外购件可以带颜色保存。 【是否需要?】
    10. 3.按照不同部件冻结软件不同的表格,让用户更加明确 【首先需要明确每种外购件需要保持哪些数据】
    11. 4.写一个父类,用来保存有共同属性的外购件。 针对不同的外购件继承这个父类?
    12. 2022.7.22
    13. 1.优化:通过按照sheet的名字来与下拉框对应,而不是索引号,(避免表单顺序错乱而造成写入错误)
    14. 遇坑:R6025 PURE VIRTUAL FUNCTION CALL
    15. 待实现
    16. 1. 用户没有选定excel地址之前,不允许用户输入内容or点选(实现)
    17. bug
    18. 写过内容的行,再手动删除,程序认为是有内容的行??
    19. 新需求:
    20. 与G2文档联动: G2的格式要求??(带边框,写入颜色?)
    21. 想法:界面新增用户输入内容, G2分类作为下拉列表 单位作为下拉列表 Make or Buy 均为buy(because 外购件)
    22. 可能的坑:带框但是没有内容的行,可能会认为是有内容的行。 考虑使用EMPTY进行判断。
    23. 与采供清单联动,通过采供清单同时把外购件的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的开发日志:

    1. 2022.7.28
    2. 【踩坑】QTCreater中加了语言之后,vs找不到.pm文件
    3. 【踩坑】VS打不开ui文件,解决方法:https://blog.csdn.net/dengjin20104042056/article/details/122160103
    4. 1.已完成新的UI界面设计;
    5. 2.部件的定位,是否可以设定int x = 0, y = 0. 每个部件在(x,y)上增加对应的数值?
    6. 2022.8.9
    7. 引入新的excel库 xlnt. 待学习库功能。
    8. 很长的QString换行问题:https://blog.csdn.net/weixin_44954996/article/details/125514405
    9. 逻辑:用户未填写G2前,禁止用户保存料号
    10. 【踩坑】引入头文件的顺序很重要
    11. 8.9 号完成工作: 配置好了xlnt库,测试了xlnt的基本操作,包括打开带密码保护的excel文件。
    12. 将xlnt引入QT程序。
    13. 8.10 号计划完成软件的基本功能。
    14. 8.10 软件基本功能完成
    15. 保存格式待优化。
    16. 增加边框+居中显示
    17. 考虑优化内容:增加一个显示用户选择的地址label
    18. 考虑增加内容:用户登录界面,需要用户输入正确的密码才能使用该软件。
    19. 8.11 完成了用户登录界面的跳转工作
    20. 【踩坑】 带密码保存之后无法再次打开excel
    21. 【踩坑2】 G2文件无法保存?------- 因为格式设置问题?? 会把表格“炸裂”

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

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

  • 相关阅读:
    C# + Oracel 批量插入数据(List,Array等)
    Mamba: Linear-Time Sequence Modeling with Selective State Spaces论文笔记
    Git认识与运用
    软件设计模式(二):工厂、门面、调停者和装饰器模式
    基于51单片机的温度甲烷监测报警串口上报proteus仿真原理图PCB
    亚远景科技-ASPICE评估师等级、ASPICE评估师培训和ASPICE评估项目等级简介
    Linux系统下的Swift与Ceph分布式存储解决方案
    Flutter 3.19.0 版本新特性
    英语——分享篇——每日100词——301-400
    JavaScript 的 switch 有四样写法,你知道么?
  • 原文地址:https://blog.csdn.net/yourgreatfather/article/details/126289915