# 功能测试报告:汇总工作簿月度块扩列/还原试点(2026-07)(2026-09-04) ## 功能说明 用户拍板:以《2026年7月道路运输量汇总表.xlsx》(已清理为“1-4 月骨架”)为母版,由程序把 5-7 月月度块按同期备份母版还原,实现“逐月扩列生成 1-N 月汇总表”的第一步试点(M1,目标期 2026-07)。口径:1-4 月保留母版数据;累计公式恢复为 1-7 月;同比 R 分母用 2025 年 1-7 月列;2025/2024 参考列保持不动;输出另存新文件,不改母版。 代码改动: - traffic-audit-server/.../reportexport/service/ReportExportService.java - exportSummaryWorkbook 增加:定位同期备份母版(_备份_*_清理前_*.xlsx,按 {年}年{月}月 匹配,搜索配置目录/user.dir/上级目录三个候选根)→ 逐格把“备份有内容而骨架缺失或内容不同”的单元格回填(含 5-7 月表头、数据、公式与累计/同比公式); - 新增 resolveSummaryDonor / restoreSummaryMonthlyBlocks / summaryCellText 三个私有方法; - 导出时置 fullCalcOnLoad=true,保证 Excel/WPS 打开即重算被改写/还原的公式。 ## 测试环境 - 后端 8090(多次重启后最新代码就绪);MySQL 127.0.0.1:3308。 - 母版:docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx(1-4 月骨架,19 页签);备份:docs/生成汇总大表/_备份_2026年7月道路运输量汇总表_清理前_20260904.xlsx。 - 方法:调用 GET /api/report/export/summaryWorkbook?period=2026-07&mode=month,保存为 docs/生成汇总大表/输出/道路运输量汇总表_2026-07.xlsx,用 openpyxl 与备份母版逐格比对(内容/公式文本,非样式)。 ## 用例与结果 1. 还原广度(正向):清理时被裁的 7 个台账/合成页(货运/班线包车/城市客运/公交/出租/网约车/轨道轮渡/中口径明细)缺失单元格全部补齐,missing=0;其余页(成品页/隐藏页)本无差异,未改动。结论 PASS。 2. 逐格对照(正向):输出与备份母版 19 页全量比对,real-diff=0;仅 31 格为“整数 vs 46143.0”的数值等价表示差异(Excel 数值相同)。结论 PASS。 3. 累计/同比公式(正向):抽查 班线包车/公交/出租/货运 等行 Q 恢复为 1-7 月各月值求和(如 =G4+E4+C4+I4+K4+M4+O4),R 恢复为 =Q/SUM(2025 年 1-7 月列)-1,与备份一致。结论 PASS。 4. 打开即重算(正向):产物 xl/workbook.xml 含 。结论 PASS。 5. 母版未被改动(正向):生成前后母版文件字节未变(只读复制)。结论 PASS。 6. 编译与启动:mvn compile EXIT=0;后端重启就绪;接口 200 返回 xlsx。结论 PASS。 ## 发现的问题与处置 1. 初版 donor 定位只查配置目录相对路径,而 spring-boot:run 的工作目录是模块目录(traffic-audit-server),导致“未找到备份母版”、输出仍为骨架:已改为与 resolveAnyTemplate 相同的 3 候选根目录扫描,复测还原成功。 2. POI setForceFormulaRecalculation 未写 calcPr:改为直接操作 XSSFWorkbook.getCTWorkbook() 的 calcPr.fullCalcOnLoad=true,已验证写入。 ## 结论 M1 试点通过:从 1-4 月骨架母版可程序化还原出与人工 7 月母版内容零差异的完整工作簿(含 5-7 月月度块与 1-7 累计/同比公式),输出文件 docs/生成汇总大表/输出/道路运输量汇总表_2026-07.xlsx。下一步 M1b:月份>7(8-12 月)时按“上一月块克隆+列引用平移”自动插入新列(备份无对应月份时用),再接入 M2 台账数据从库内填充。 ## 附注:输出格式修复(2026-09-04 14:15 复测) 用户反馈生成产物格式不美观:定位为 `exportSummaryWorkbook` 中调用了 `autoFitContentColumns(wb)`,按公式文本计算宽度后把人工母版整体列宽顶到约 36,覆盖了模板版式。 处置:汇总大表导出不再 autoFit(保留人工母版列宽/版式;其余小报表导出仍 autoFit)。重新编译并复跑 `GET /api/report/export/summaryWorkbook?period=2026-07&mode=month` 后: - 列宽 diff=0、合并单元格 diff=0、行高 diff=0(与人工母版逐页比对); - 内容 real-diff=0(31 处为整数/浮点等价差异如 46143 vs 46143.0,正常); - 产物:`docs/生成汇总大表/输出/道路运输量汇总表_2026-07.xlsx`(约 921 KB)。 结论:PASS,待用户在 Excel/WPS 中打开确认视觉格式。