行业领域: 工业石英砂酸洗加工与质量管控
业务场景: 化验室质量检测人员在日常工作中需要将石英砂酸洗成品检验数据、原砂入库检验数据录入到数据库中。传统方式是手工将Excel化验报告中的数据逐个录入系统,工作量大且容易出错。
核心解决的痛点:
- Excel表格格式复杂,存在跨行合并与非跨行混合布局(RedMe.txt中明确说明)
- 数据格式多样:Excel序列号日期、OLE时间戳、百分数等,需要统一格式化
- 人工录入效率低、易出错,缺乏自动化上传手段
点击空白处退出提示
行业领域: 工业石英砂酸洗加工与质量管控
业务场景: 化验室质量检测人员在日常工作中需要将石英砂酸洗成品检验数据、原砂入库检验数据录入到数据库中。传统方式是手工将Excel化验报告中的数据逐个录入系统,工作量大且容易出错。
核心解决的痛点:
- Excel表格格式复杂,存在跨行合并与非跨行混合布局(RedMe.txt中明确说明)
- 数据格式多样:Excel序列号日期、OLE时间戳、百分数等,需要统一格式化
- 人工录入效率低、易出错,缺乏自动化上传手段
功能模块 描述
文件选择与校验 支持.xls/.xlsx文件选择,含存在性、可读性、扩展名三级校验,异常捕获完善
Excel数据解析 解析"生产酸洗成品"和"原砂入库"两个工作表,跳过空行/无效行,读取行列数据填充结构体
数据格式转换 OLE序列日期→中文日期(yyyy年M月d日)、时间数值→h:m格式、小数→百分数字符串(%.2f%%)、双精度格式化
跨行数据处理 支持原砂入库表中同一供应商跨多行存储数据,"原砂入库"sheet当检测到新供应商时提交前一行,合并多行时使用&&分隔符拼接同字段数据
进度交互 QProgressDialog实时显示解析进度、已耗时,支持用户中途取消操作
MySQL数据库连接 连接远程MySQL(1.14.26.239:3306),"连接/已连接"按钮切换状态(红/绿灯),支持自动重连
数据入库 参数化SQL防注入,将解析后的pickedProduct_Type、RawInspectionRow结构体写入yujingui.pickledproduct和yujingui.rawsand两张表(当前代码中插入部分已注释)
数据查询 提供getLatestPickedProducts/getLatestRawProducts从数据库拉取最新N条记录
软件自动更新 集成QSimpleUpdater,从GitHub Pages拉取updates.json版本检测,下载完成后自动启动新安装包并退出当前进程
层次 技术
语言 C++ (C++11/14)
UI框架 Qt 5.9.0 (Widgets + Qt Designer .ui)
构建系统 qmake (uploadExcel.pro) + MinGW 32-bit (GCC 5.3)
Excel解析 QtXlsx模块(第三方Qt模块,读写.xlsx)
数据库 MySQL 远程服务器,通过Qt SQL模块 QMYSQL驱动连接
自动更新 QSimpleUpdater(第三方库,MIT协议)
架构模式 桌面单机应用,模块分层:UI层(mainwindow)→业务逻辑层(excelreader)→数据访问层(mysqldatabase)
3.2 实现亮点
1. 复杂Excel格式适配能力强 — 同时支持跨行/非跨行混合布局,原砂入库表通过"供应商名判定新行起始"的逻辑,用&&拼接同一供应商多行数据(excelreader.cpp:407-570)
2. 多重数据格式自动转换 — 针对工业化验Excel中常见的OLE序列日期、小数百分数、时间戳等格式,提供了formatSerialDateToChinese、formatTimeToMMSS、toPercentString、safeFormatDouble、convertOleDateTime等一整套自动转换工具
3. 完善的异常处理体系 — 三层catch(自定义异常→标准异常→未知异常),每个环节均有fallback,进度条支持用户取消
4. 线程安全的数据库单例 — MySQLDatabase使用双检锁+QMutex保证多线程环境下实例唯一性,连接配置支持MYSQL_OPT_RECONNECT=1自动重连(mysqldatabase.cpp:16-23)
5. 静默自动更新 — 下载完成后QProcess::startDetached启动新安装程序,QTimer::sin




评论