用户反馈《道路运输量汇总表》两个问题:**1. 所有排名表里面的数据没有更新;2. 同比应该是百分数而不是小数**。本轮定位并修复:
2026年8月道路运输量汇总表.xlsx 里的 货运量排名 / 货运周转量排名 / 中口径排名 三页是**上一报表期的静态值**(标题写「2026年1-7月 / 2026年7月」,数值也是 7 月),导出 8 月时整页不随数据变化。refreshSummaryRankSheets,用程序自己的独立排名表(生成_货运量排名.xlsx / 生成_周转量排名.xlsx / 生成_中口径排名.xlsx,与用户日常核对口径一致)刷新这三页:2026年1-7月… → 2026年1-8月…、2026年7月… → 2026年8月…)。0.00」格式,而 7 月及以前的同比列是 0.00%;回填公式后 8 月同比显示成 -0.0294 这样的小数。SummaryWorkbookFiller.ensureMonthYoyFormulas 原来只在目标格为空时套用上月同比列样式,改为**无条件沿用上月同比列样式**(0.00%)。traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java:新增 refreshSummaryRankSheets / copyRankValues / rankCell / shiftFormula,在 ensureMonthFormulas 之后、applySummaryReferenceLayout 之前调用。traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/SummaryWorkbookFiller.java:ensureMonthYoyFormulas 样式沿用。http://localhost:8090(start-dev.ps1 启动),导出接口 GET /api/report/export/summaryWorkbook?period=YYYY-MM。docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx;版式参照:docs/生成汇总大表/生成_道路运输量汇总表.xlsx。docs/货运/生成_货运量排名.xlsx、docs/货运/生成_周转量排名.xlsx、docs/公路旅客/生成_中口径排名.xlsx。_gen2_2026-08.xlsx、_gen2_2026-07.xlsx、_v2_freight_rank.xlsx、_v2_turnover_rank.xlsx、_v2_mid_rank.xlsx。| 编号 | 输入 | 预期 | 实际 | 结论 |
|---|---|---|---|---|
| TC-1 | 导出 period=2026-08 |
HTTP 200,正常产出文件 | 949,956 字节,23.8 秒返回 | 通过 |
| TC-2 | 后端回填日志 | 有排名页刷新统计、无缺数提示 | 写入当月值格数=1659,补写当月同比公式格数=600,补写当月合计公式格数=43,**刷新排名页数值格数=711**,对齐列宽列数=422,缺数提示=[] | 通过 |
| TC-3 | 货运量排名块标题 | 随报表期改为 1-8 月/8 月 | A1=2026年1-8月全省分市州累计完成公路货运量情况;A22=2026年8月全省分市州完成公路货运量情况 |
通过 |
| TC-4 | 货运周转量排名块标题 | 同上 | A2=…2026年1-8月…;A24=…2026年8月… |
通过 |
| TC-5 | 中口径排名块标题 | 同上 | J1=2026年1-8月全省分市州累计完成道路客运生产情况;J22=2026年8月… |
通过 |
| TC-6 | 标题落盘方式(原始 XML 校验) | <is><t> 与显示一致(不能再出现 <v> 新值 + <is> 旧值) |
xl/worksheets/sheet2.xml:<c r="A1" s="776" t="s"><v>0</v></c>,共享串 0 = 2026年1-8月…(旧文件是 inlineStr,<v>=8月、<is><t>=7月) |
通过 |
| TC-7 | 货运量排名逐格入库抽查(与独立排名表比对) | 全块一致 | 累计块 + 当月块共 454 格逐个比对,0 处不一致 | 通过 |
| TC-8 | 货运周转量排名当月块抽查 | 与独立表一致 | 武汉 B28=192320.5226(源 B27)、G28=504369.61288609065(源 G27)、E28=0.3334642531154999(源 E27)、J28=-0.021161120884320206(源 J27) | 通过 |
| TC-9 | 货运周转量排名母版公式保留 | 不写死值,保留 SUM/RANK/占比 | 全省 B27==SUM(B28:B44);武汉 C28==RANK(B28,B$28:B$44)、D28==B28/B$27 |
通过 |
| TC-10 | 中口径排名数值抽查 | 与独立表一致 | K4=2759.8855(源 B4)、O4=152330.9312(源 F4)、K25=349.536(源 L4)、O25=18917.1637(源 P4) | 通过 |
| TC-11 | 中口径排名「增速排名」列 | 不再是静态怪值,且与页内同比自洽 | 由静态值(多行同为 1.0)改为 =RANK(M4,M$4:M$20)、=RANK(M25,M$25:M$41) 等自洽公式;缓存值与母版原值一致(L25=5、N25=10、P25=2、R25=5) |
通过 |
| TC-12 | 8 月同比列格式(问题 2) | 百分数 0.00% |
货运 R5==Q5/AJ5-1 / 0.00%;班线包车、城市客运、公交、出租、网约车、轨道轮渡、中口径明细 8 月同比列(R 列)**全部 0.00%** |
通过 |
| TC-13 | 排名页同比列格式 | 百分数 0.00% |
货运量排名 E4=-0.0763 / 0.00%、D5=0.3207… / 0.00%;货运周转量排名、中口径排名同比列同为 0.00% |
通过 |
| TC-14 | 打开即重算 | 仍带全量重算标记 | <calcPr … fullCalcOnLoad="true"/> 保留 |
通过 |
| 编号 | 输入 | 预期 | 实际 | 结论 |
|---|---|---|---|---|
| TC-N1 | 全表扫描「表头含同比 + 数值/公式 + 格式非百分数」的格 | 不应有新引入的小数同比 | 8 月件命中 3 格,全部在隐藏页(2025年城市客运量!E13、中口径计算过程!G85/G86),母版同位置同样如此 |
通过(非本轮引入) |
| TC-N2 | 独立排名表源侧同比为空时(库中无 2025 年中口径数据) | 不应把 POI 对空值的求值结果(全为 1)搬进汇总表 | 改为写公式后,该列为 =RANK(…) 公式,按页内同比取值,不再是 17 行全 1 |
通过 |
| TC-N3 | 调试日志清理 | 导出日志不应残留 RANKDBG |
backend.log 中 RANKDBG 计数 = 0 |
通过 |
| 编号 | 输入 | 预期 | 实际 | 结论 |
|---|---|---|---|---|
| TC-R1 | 导出 period=2026-07 |
正常产出、当月同比仍指向 2025 年 7 月 | 941,903 字节;货运 P5==O5/AF5-1 / 0.00% |
通过 |
| TC-R2 | 与改动前 7 月产物(_gen_2026-07.xlsx)逐格 diff |
差异仅限被刷新的排名页 | 仅 货运量排名 51 格、中口径排名 133 格有差异(排名页由静态值改为按数据刷新,属预期);其余 16 页 0 差异 |
通过 |
| TC-R3 | 7 月排名页标题 | 仍为 1-7 月/7 月(按报表期) | A1=2026年1-7月…、A22=2026年7月…;中口径 J22=2026年7月… |
通过 |
| TC-R4 | 7 月同比格式 | 无新增小数同比 | 全表命中 3 格,均为隐藏页母版原有格 | 通过 |
inlineStr,POI 在 t="inlineStr" 单元格上 setCellValue(String) 只写 <v>、不动 <is><t>,而 Excel/WPS 优先读 <is><t>。处置:写值前先 setBlank() 清掉原单元格再写(落盘为共享串,<is> 不再残留旧文案)。RANK 函数求值一律返回 1,直接搬值会把 17 行「增速排名」写成全 1。处置:源侧公式不再搬求值结果,而是按目标块偏移平移成公式写入,再用汇总表自身数据求值缓存。h2031_enterprise_monthly / city_bus_monthly),没有 2025 定稿数据,独立排名表算不出中口径同比 → 该列按设计保留母版值;等 2025 数据入库后随导出自动刷新。城市汇总、城市分市州、中口径分析、道路运输周转量 四页在母版里是整页静态(本轮导出与母版逐格 0 差异),页标题仍写「1-7 月 / 7 月」。因整页数据未数据驱动,本轮**未**只改标题(避免标题 8 月、数据 7 月),留待后续做成数据驱动时一并处理。