# 功能测试报告_汇总大表8月数据回填与版式对齐_2026-09-11 ## 一、功能说明 针对用户反馈的 4 个问题,对《道路运输量汇总表》导出链路做数据驱动回填与版式对齐: 1. **8 月数据已入库但汇总表没有 8 月数据** → 汇总工作簿填充器识别「当月值列」(8 月为 Q 列)并回填; 2. **同比一律以汇总表 2025 年 8 月数据为准** → 当月同比列(R 列)公式统一为 `=Q../AJ..-1`,AJ 列即 2025 年 8 月; 3. **公交、出租数据是日期形式** → 回填数值时按同行 1 月列样式套用,避免数值被套上日期格式(显示成 1902/1910 年); 4. **班线包车、轨道轮渡只有分市州没有全省数据** → 为全省行补齐合计公式(母版原本只对 1 月写死公式); 5. **版式完全按《生成_道路运输量汇总表.xlsx》** → 逐列套用参照件列宽/隐藏标记,**后续扩列(8 月 Q/R 列)也按参照件宽度**。 改动范围: - `SummaryWorkbookFiller`:`fillFreightSheet` / `fillWycSheet` 重写(只回填目标期当月,派生行保持公式);新增 `ensureMonthFormulas`、`ensureMonthYoyFormulas`、`monthColumnCapacity`; - `ReportExportService`:导出时调用 `ensureMonthFormulas` + 新增 `applySummaryReferenceLayout`(按参照件对齐列宽); - `WycSplitCalc`:汇总表网约车取数优先读库。 关键口径:当月值列(0 基)= `2 + 2*(m-1)`,同比列 = 值列 + 1;同比分母固定为 AJ 列(2025 年 8 月)。 ## 二、测试环境 - 后端 `http://localhost:8090`,导出接口 `GET /api/report/export/summaryWorkbook?period=YYYY-MM`。 - 母版:`docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx`;版式参照:`docs/生成汇总大表/生成_道路运输量汇总表.xlsx`。 - 测试时间:2026-09-11。 ## 三、用例表 ### 3.1 正向:2026-08 生成与当月取值 | 编号 | 检查项 | 预期 | 实际 | 结论 | | --- | --- | --- | --- | --- | | TC-1 | 导出 2026-08 | HTTP 200,正常产出文件 | 4.6 秒返回,948,735 字节 | 通过 | | TC-2 | 后端回填日志 | 有写入格数统计、无缺数提示 | 写入当月值格数=1659,补写当月同比公式格数=600,补写当月合计公式格数=43,对齐列宽列数=422,缺数提示=[] | 通过 | | TC-3 | 货运页全省块(行5-10)Q 列 | 规上/规下货运量与周转量有值,合计行为公式 | 规上货运量 3666.1401、规下 13222.6214、规上周转 570004.4355、规下周转 1700006.166;Q5=`=Q7+Q9`、Q6=`=Q8+Q10` | 通过 | | TC-4 | 货运页 Σ17市州 = 全省 | 相等 | Σ17市州货运量 = 16888.7615;全省 Q5 = 3666.1401 + 13222.6214 = 16888.7615 | 通过 | | TC-5 | 货运页市州派生行 | 不写死值,保持公式 | 武汉 Q14(规上+规下周转量)=`=Q15+Q16`;规上/规下分项为数值 | 通过 | | TC-6 | 网约车页 | 17 市州当月有值,全省行为公式 | 武汉 Q9=1879.9049…、Q10=13407.6982…;全省 Q5=`=Q9+Q13+…+Q73`;Σ17市州客运量=4997.74、周转量=29166.7 | 通过 | | TC-7 | 公交页 | 市州当月有值且**不是日期显示** | Q9=3856.83(武汉客运量),单元格格式 `0.00`;全省 Q5 为求和公式 | 通过 | | TC-8 | 出租页 | 同上 | Q9=1058.95(武汉客运量),格式 `0.00`;全省 Q5 为求和公式 | 通过 | | TC-9 | 班线包车页全省行 | 有全省合计(原缺失) | Q4=`=Q8+Q10+Q14+…+Q56`、Q5=`=Q9+Q11+…+Q57`、Q6/Q7 个体合计亦为公式 | 通过 | | TC-10 | 轨道、轮渡页全省行 | 有全省合计(原缺失) | 轨道 全省 Q4=`=SUM(Q6,Q8)`、Q5=`=Q7+Q9`;轮渡 全省 Q13=`=Q15`、Q14=`=Q16` | 通过 | | TC-11 | 同比公式指向 2025 年 8 月 | R 列分母为 AJ 列 | 各页表头 AJ 列 = `2025年8月`;R 列公式形如 `=Q9/AJ9-1`;AJ 列确有 2025 年 8 月母版数值(如货运 AJ7=3716.1158) | 通过 | | TC-12 | 打开即重算 | 文件带全量重算标记 | `xl/workbook.xml` 内 ``,Excel/WPS 打开即算出全省合计 | 通过 | ### 3.2 版式对齐(第 5 项) | 编号 | 检查项 | 预期 | 实际 | 结论 | | --- | --- | --- | --- | --- | | TC-13 | 全表列宽与《生成_道路运输量汇总表》比对(展开 `` 范围逐列比对) | 完全一致 | 19 个页签全部比对,**真实差异 0 列** | 通过 | | TC-14 | 扩列(8 月 Q/R)列宽 | 与参照件 8 月一致 | 货运 P/Q/R = 12.67/10.55/11.67(参照 12.67/10.56/11.67,仅 0.01 浮点舍入);网约车/轨道轮渡 Q/R=13.0/13.0;公交 Q/R=11.89/13.0;出租 Q/R=11.89/13.0;班线包车 Q/R=10.22/9.78 —— 均与参照件相同 | 通过 | ### 3.3 负向与回归 | 编号 | 检查项 | 预期 | 实际 | 结论 | | --- | --- | --- | --- | --- | | TC-15 | 历史月(2026-07)不得被当月回填污染:与 `docs/生成汇总大表/_备份_2026年7月道路运输量汇总表_清理前_20260904.xlsx` 逐格比对 | 除既定改造外无差异 | 差异共三类:① 426 处浮点末位差(最大相对差 7.26e-15,属 Excel 15 位有效数字截断,无实质差异);② 57 处"文本 vs 等值数字";③ 148 处全部集中在「中口径排名」页 —— 该页左侧陈旧块已于 2026-09-08 按需求整块删除,属**预期变化**。**无回归** | 通过 | | TC-16 | 缺月提示 | 缺数据的月份有提示 | 2026-08 导出 `缺数提示=[]` | 通过 | ## 四、发现的问题与处置 1. **问题(已修复)**:`monthColumnCapacity` 原实现只认"含 2026+累计"的表头,而货运页表头是"累计周转量",导致其恒返回默认列数、8 月列永不回填。**处置**:改为「累计列」与「最后一个月份/日期格式月列」取较大值。 2. **问题(已修复)**:`shiftFormulaColumns` 连续组引用被拼成 `Q5AJ5O5`。**处置**:`sb.append(quoteReplacement(...))` → `m.appendReplacement(sb, quoteReplacement(...))`。 3. **问题(已修复)**:`ensureMonthYoyFormulas` 中 `setCellFormula` 失败被静默吞掉。**处置**:改为抛出含页签/单元格/原式/目标式的 `IllegalStateException`,便于定位。 4. **问题(已修复)**:回填目标格若被套上日期格式,数值会显示成 1902/1910 年(即用户反馈的"日期形式")。**处置**:`setNumeric` 对空/日期格式格套用同行 1 月列样式;对已有公式格直接跳过不覆盖。 5. **已知无害告警**:2026-08 导出时日志出现 `汇总工作簿未找到同期备份母版(_备份_2026年8月…),输出将保持母版现状`。原因是 8 月没有"清理前备份母版",而 8 月母版本身已是完整母版,无需从备份还原,故不影响输出(已逐项验证取值正确)。7 月因存在 `_备份_2026年7月…` 无此告警。 6. **性能注意**:`applySummaryReferenceLayout` 的列数上限保留 `min(参照件已用列数, 目标件已用列数 + 4)` —— 去掉该上限会让 POI 在大列号(货运页 147 列)上出现指数级卡顿。 ## 五、结论 8 月汇总大表已能由库中数据自动生成:货运规上/规下、网约车、公交、出租、班线包车、轨道轮渡的当月列均已回填,全省合计与分市州合计一致;同比统一取 2025 年 8 月;公交/出租不再显示为日期;班线包车与轨道轮渡的全省数据已补齐(公式,打开即算);全表列宽与用户指定的《生成_道路运输量汇总表》逐列一致(含 8 月扩列宽度)。7 月历史月回归无实质差异。 遗留:请将真实的《网约车行业2026年8月运行监测情况分析报告》重传一次,覆盖当前用 7 月报告临时副本导入的 8 月市州订单数。