From 80e08795ef502404dd4e343a9779c68cd8567846 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期三, 16 九月 2026 17:31:28 +0800
Subject: [PATCH] fix(summary): 修 2026-07 导出件「Excel 打不开」+ 补齐 7 月母版 2021/2022/2023 累计列

---
 docs/问题汇总/问题与注意事项汇总_2026-09-16.md                                                                 |   44 +++++++++++
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java |   33 ++++++++
 docs/工作日结/工作日结_2026-09-16.md                                                                      |   63 +++++++++++++++
 docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx                                                                  |    0 
 docs/功能测试报告/功能测试报告_2026-07母版补齐与导出件打不开修复_2026-09-16.md                                             |   86 +++++++++++++++++++++
 5 files changed, 226 insertions(+), 0 deletions(-)

diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_2026-07\346\257\215\347\211\210\350\241\245\351\275\220\344\270\216\345\257\274\345\207\272\344\273\266\346\211\223\344\270\215\345\274\200\344\277\256\345\244\215_2026-09-16.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_2026-07\346\257\215\347\211\210\350\241\245\351\275\220\344\270\216\345\257\274\345\207\272\344\273\266\346\211\223\344\270\215\345\274\200\344\277\256\345\244\215_2026-09-16.md"
new file mode 100644
index 0000000..1c5da10
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_2026-07\346\257\215\347\211\210\350\241\245\351\275\220\344\270\216\345\257\274\345\207\272\344\273\266\346\211\223\344\270\215\345\274\200\344\277\256\345\244\215_2026-09-16.md"
@@ -0,0 +1,86 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡 鈥� 2026-07 姣嶇増琛ラ綈 & 瀵煎嚭浠躲�孍xcel 鎵撲笉寮�銆嶄慨澶�
+
+- 鏃ユ湡锛�2026-09-16
+- 鑼冨洿锛氭眹鎬诲ぇ琛紙`/api/report/export/summaryWorkbook`锛�2026-07 / 2026-08 瀵煎嚭锛沗docs/鐢熸垚姹囨�诲ぇ琛�/2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃.xlsx` 姣嶇増琛ラ綈
+- 鍏宠仈锛歚docs/闂姹囨��/闂涓庢敞鎰忎簨椤规眹鎬籣2026-09-16.md` 绗崄涓夎妭
+
+## 涓�銆佽儗鏅�
+
+銆� 璐ц繍銆嬮〉銆岀疮璁°�嶅垪鍙e緞鍦� 2026-09-16 宸插湪 **8 鏈堟瘝鐗�** 钀藉湴锛堣绗崄浜岃妭锛夈�傜敤鎴风‘璁ゃ�屽彲浠ヨˉ榻愩�嶏紝瑕佹眰鎶婂悓涓�鍙e緞琛ュ埌 **7 鏈堟瘝鐗�**锛屽苟瑙e喅 7 鏈堝鍑轰欢鏃犳硶鐢� Excel 鎵撳紑鐨勯棶棰樸��
+
+## 浜屻�佹祴璇曠幆澧�
+
+| 椤� | 鍊� |
+|---|---|
+| 鍚庣 | Spring Boot锛�8090锛堜慨澶嶅悗宸查噸鍚級 |
+| 鍓嶇 | Vue锛�8080 |
+| 鏁版嵁搴� | MySQL 127.0.0.1:3308 / traffic_audit |
+| Excel 鍒ゆ嵁 | Excel COM `Workbooks.Open`锛堟瘡渚嬬嫭绔嬪疄渚嬶紝娴嬪悗寮烘潃瀛ゅ効杩涚▼锛� |
+| 缁撴瀯鍒ゆ嵁 | Python `zipfile` + `xml.etree` 閫愰儴浠舵牎楠屻�侀�愭牸 `<c>` 瑙f瀽 |
+
+## 涓夈�佸彂鐜扮殑鏍瑰洜锛堜袱澶勶紝鍧囦负鏈淇瀵硅薄锛�
+
+### 3.1 瀵煎嚭浠舵墦涓嶅紑锛氭畫鐣� `<is>` 鐨勯潪娉曞崟鍏冩牸
+
+鍧忎欢閲屽瓨鍦� 19 涓�**妯″紡闈炴硶**鐨勬牸瀛愶細
+
+```
+<c r="E15" s="111" t="n"><v>67.0</v><is><t>67.00</t></is></c>
+```
+
+`<is>`锛坕nlineStr锛夊彧鍏佽鍑虹幇鍦� `t="inlineStr"` 鐨勬牸閲岋紱`t="n"` 鍗村甫 `<is>` 灞炰簬闈炴硶锛孍xcel 鐩存帴鍒ゅ畾銆屾棤娉曡鍙栫殑鍐呭銆嶆嫆缁濇墦寮�锛圕OM 琛ㄧ幇涓恒�屼笉鑳藉彇寰楃被 Workbooks 鐨� Open 灞炴�с�嶏紝杩炰慨澶嶆ā寮� `CorruptLoad=1` 涔熸墦涓嶅紑锛夈��
+
+**鎴愬洜**锛�7 鏈堟瘝鐗堢敱 **openpyxl** 鍐欏嚭锛坄docProps/app.xml` = `Microsoft Excel Compatible / Openpyxl 3.1.5`锛屾枃鏈敤 `<is>` 瀛樺偍锛夈�傚鍑烘椂鍒殑鍐欏叆璺緞鍙敼 `t`/`<v>`锛�**涓嶆竻鏃� `<is>`**锛涜�� 8 鏈堟瘝鐗堟槸 Excel 鍘熺敓锛堟枃鏈蛋 sharedStrings锛夛紝鎵�浠ュ悓鏍蜂唬鐮佷笅 8 鏈堜欢姝e父銆�7 鏈堜欢鍧忋��
+
+**涓轰粈涔堝彧鏈� 7 鏈堝潖**锛�7 鏈堝瓨鍦ㄥ悓鏈熷浠芥瘝鐗� `_澶囦唤_2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃_娓呯悊鍓峗20260904.xlsx`锛宍restoreSummaryMonthlyBlocks` 浼氭暣鏍煎洖濉紱鍥炲~鍐欏叆 inlineStr 姣嶇増鏍兼椂鐣欎笅鏃� `<is>`銆�8 鏈堟病鏈夎 `_澶囦唤_*` 鏂囦欢锛屼笉璧板洖濉紝鍥犳涓嶈Е鍙戙��
+
+**瀹氫綅鏂规硶**锛堝彲澶嶇敤锛夛細鍧忎欢涓庡ソ浠堕櫎 worksheets/styles/sharedStrings 澶�**鍏ㄩ儴閮ㄤ欢閫愬瓧鑺傜浉鍚�** 鈫� 鐢� zip 鏉備氦 + Excel 閫愪竴寮�妗e仛 leave-one-out锛屽畾浣嶅埌 **sheet9銆婂叕浜ゃ��(17 鏍�) + sheet12銆婅建閬撱�佽疆娓°��(2 鏍�)**銆�
+
+### 3.2 姣嶇増琛ラ綈琚浠芥瘝鐗堛�岀敓鎴愬張澶嶆椿銆�
+
+琛ュソ 7 鏈堟瘝鐗堝悗瀵煎嚭锛宍璐ц繍` 椤� 2022/2021 绱**鍙堝彉鍥炴棫鍐欐甯搁噺** 鈥斺�� 鍥犱负 `restoreSummaryMonthlyBlocks` 鎶婂浠芥瘝鐗堬紙娓呯悊鍓嶃�佷粛鏄棫甯搁噺锛夋暣鏍煎洖濉鐩栦簡姣嶇増鐨勬柊鍏紡銆�
+
+## 鍥涖�佷慨澶嶅唴瀹�
+
+| # | 浣嶇疆 | 鏀瑰姩 |
+|---|---|---|
+| 1 | `ReportExportService.exportSummaryWorkbook` | 钀界洏鍓嶆柊澧� `normalizeStaleInlineStrings(wb)`锛氭妸鎵�鏈夈�岄潪 inlineStr 鍗存畫鐣� `<is>`銆嶇殑鏍煎瓙娓呮帀锛堝箓绛夛級锛屽苟鎵� warn 鏃ュ織 |
+| 2 | `ReportExportService.restoreSummaryMonthlyBlocks` | 鏂板 `skipFreightHistoryBlocks`锛氥�� 璐ц繍銆嬮〉 **T 鍒楀強浠ュ悗**锛�2025/2024/2023/2022/2021 骞村害鍧� + 鍚勫勾绱/绱鍚屾瘮鍒楋級姘镐笉浠庡浠芥瘝鐗堝洖濉紝閬垮厤鈥滅敓鎴愬張澶嶆椿鈥濓紙涓庢棦鏈夈�屼腑鍙e緞鎺掑悕銆嶅乏鍧椾繚鎶ゅ悓涓�鎬濊矾锛� |
+| 3 | `docs/鐢熸垚姹囨�诲ぇ琛�/2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃.xlsx` | Excel COM 琛ラ綈锛�2025/2024/2023/2022/2021 浜斾釜骞村害鍧楀叡 **360** 涓潡鍐呮牸锛坄r7/r9/r8/r10 = SUM(17 甯傚窞)`銆乣r5=r7+r9`銆乣r6=r8+r10`锛�+ **324** 涓疮璁℃牸锛坄DX=SUM(DK:DV)`銆乣EM=SUM(EA:EL)`銆乣DY=IFERROR(DX/SUM(EA:EL)-1,"")`锛夛紝`CalculateFullRebuild` 鍚庝繚瀛� |
+
+> 澶囦唤锛歚docs/鐢熸垚姹囨�诲ぇ琛�/_bak_2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃_琛ラ綈鍓峗20260916.xlsx`锛�**鏁呮剰涓嶇敤 `_澶囦唤_` 鍓嶇紑**锛屽惁鍒欎細琚� `resolveSummaryDonor` 褰撴垚 donor 鍥炲~锛夈��
+
+## 浜斻�佺敤渚嬭〃
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|---|
+| 1 | 鍧忎欢澶嶇幇 | 2026-07 瀵煎嚭锛堜慨澶嶅墠锛� | 鍙墦寮� | Excel 鎶ャ�屼笉鑳藉彇寰楃被 Workbooks 鐨� Open 灞炴�с�嶏紝閲嶈瘯 2 娆′粛澶辫触 | 澶嶇幇 |
+| 2 | 鐜鎺掗櫎 | 10KB 灏忎欢 / 8 鏈堟瘝鐗� / 7 鏈堟瘝鐗� / 09-08 鏃� 7 鏈堝鍑� | 鈥� | 鍏ㄩ儴鍙墦寮�锛涗粎鏂� 7 鏈堝鍑哄け璐� | 纭闈炵幆澧冮棶棰� |
+| 3 | 璺緞鎺掗櫎 | 鍧忎欢澶嶅埗鍒板彟涓�鐩綍鏀瑰悕 | 浠嶅け璐� | 浠嶅け璐� | 纭鏄枃浠跺唴瀹归棶棰� |
+| 4 | 閮ㄤ欢绾ф潅浜� | 鍧忎欢 + 濂戒欢鐨� styles/sharedStrings/worksheets | 瀹氫綅鍧忛儴浠� | 鍧忎欢 styles + 鍧忎欢 sst + **濂戒欢鍏ㄩ儴 sheets** 鈫� 鍙墦寮� | 瀹氫綅鍒� worksheets |
+| 5 | leave-one-out | 19 涓� sheet 閫愪釜鎹㈡垚鍧忎欢鐗� | 鎵惧嚭鍧� sheet | 浠� **sheet9銆婂叕浜ゃ��/ sheet12銆婅建閬撱�佽疆娓°��** 澶辫触 | 瀹氫綅鍒� 2 椤� |
+| 6 | 璐熷悜锛氶潪娉曟牸璁℃暟 | 淇鍓嶅鍑轰欢 | 鈥� | 19 涓� `t="n"` 甯� `<is>` | 鍛戒腑鏍瑰洜 |
+| 7 | 姝e悜锛氫慨澶嶅悗 2026-07 | 閲嶅惎鍚庣鍚庡鍑� | 鍙墦寮�銆�19 椤点�佺疮璁″ | OK sheets=19锛沗DX5=144979.2825`锛坄=SUM(DK5:DV5)`锛夈�乣DY5=-0.101235487797891`銆乣EM5=161309.53162`銆乣CU5=173045.296428512` | 閫氳繃 |
+| 8 | 姝e悜锛氫慨澶嶅悗 2026-08 | 鍚屼笂 | 鍙墦寮�銆佺疮璁′笉鍙� | OK sheets=19锛沗DZ5=144979.2825`銆乣EO5=161309.53162`銆乣CW5=173045.296428512`銆乣S5=130311.892698249` | 閫氳繃 |
+| 9 | 璺ㄦ湀涓�鑷存�� | 7 鏈� vs 8 鏈堝悓鍙e緞鏍煎瓙 | 瀹屽叏鐩哥瓑 | 2022 绱 / 2021 绱 / 2023 绱 涓変釜鏈堝害 鈫� 涓変釜鍊�**瀹屽叏鐩哥瓑** | 閫氳繃 |
+| 10 | 闈炴硶鏍煎鎵� | 淇鍚� 7 鏈堝鍑� | 0 涓� | 0 涓� | 閫氳繃 |
+| 11 | 姣嶇増鍙墦寮� | 琛ラ綈鍚庣敤 Excel 鎵撳紑 7 鏈堟瘝鐗� | 鍙墦寮� | 鍙墦寮� | 閫氳繃 |
+| 12 | 娈嬬暀鏁版嵁澶嶆牳 | `2026-09` 浜斿紶琛ㄨ鏁� | 鍏� 0 | 鍏� 0锛坔204 / investment_monthly / h2032 / audit_result / import_batch锛� | 閫氳繃 |
+
+## 鍏�佸彂鐜扮殑闂涓庡缃�
+
+1. **7 鏈堝鍑轰欢鎵撲笉寮�**锛圥0锛夛細`normalizeStaleInlineStrings` 鏍规不锛涘鍑轰欢浠� 941,960 瀛楄妭锛堝潖锛夆啋 1,310,693 瀛楄妭锛堝ソ锛夈��
+2. **澶囦唤姣嶇増鍥炲~璁╄ˉ榻愬け鏁�**锛圥0锛夛細`skipFreightHistoryBlocks` 淇濇姢 `璐ц繍` T 鍒楀強浠ュ悗銆�
+3. **Excel COM 浼氱暀瀛ゅ効杩涚▼**锛氭瘡渚嬫祴瀹屽繀椤诲己鏉�鏈鏂板缓鐨� `EXCEL` 杩涚▼锛屽惁鍒欏悗缁� `Workbooks.Open` 浼�**闂存瓏鎬у亣鎶�**鍚屾牱鐨勯敊锛堟湰娆℃帓鏌ュ垵鏈熻姝ゅ共鎵拌繃锛夈�傚睘鎺掓煡宸ュ叿鍧戯紝宸茶鍏ラ棶棰樻眹鎬汇��
+4. **娉ㄦ剰**锛氭湰娆�**鏈�**鏀瑰姩 8 鏈堟瘝鐗堜笌浠讳綍鍏ュ簱鏁版嵁銆�
+
+## 涓冦�佺粨璁�
+
+- 2026-07 / 2026-08 涓や釜瀵煎嚭浠跺潎鍙 Excel 姝e父鎵撳紑锛堝悇 19 椤碉級锛屼笖銆� 璐ц繍銆嬮〉 2021/2022/2023 绱鍒楀彛寰�**瀹屽叏涓�鑷�**銆�
+- 7 鏈堟瘝鐗堝凡鎸� 8 鏈堟瘝鐗堝彛寰勮ˉ榻愶紙骞村害鍧� 360 鏍� + 绱 324 鏍硷級锛屽苟浠� openpyxl 琛�缂樿浆涓� Excel 鍘熺敓銆�
+- 鐢ㄦ埛瑕佹眰鐨勩�屾畫鐣欐暟鎹叏閮ㄦ竻闄ゃ�嶇粡澶嶆牳涓� 0 娈嬬暀銆�
+
+## 鍏�侀仐鐣�
+
+- 2026-06 / 2026-09 鏃犳瘝鐗� 鈫� 棰勮杩斿洖 `ready=False`銆屾湭鎵惧埌妯℃澘鏂囦欢銆嶏紝闇�鏂板缓姣嶇増鎵嶈兘鍑烘暟锛堢敤鎴风 5 闂殑寤朵几锛夈��
+- 浠撳簱鏍圭洰褰� `_*.*` 涓存椂鎺掓煡鏂囦欢锛堝惈鏈 `_hyb_*` / `_loo_*` / `_v2_*` / `_final_*`锛夋湭鍒狅紝寰呯敤鎴峰悓鎰忋��
diff --git "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-16.md" "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-16.md"
index 196259b..3ab2a99 100644
--- "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-16.md"
+++ "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-16.md"
@@ -309,3 +309,66 @@
 - 2026-07 鏈熷鍑轰欢銆� 璐ц繍銆嶉〉涓� 118x145锛堟瘮 8 鏈堝皯 2 鍒楋級锛屽洜 7 鏈堟瘝鐗堟槸銆�1-4 鏈堥鏋躲�嶃��
 
 璇﹁銆婂姛鑳芥祴璇曟姤鍛�/鍔熻兘娴嬭瘯鎶ュ憡_璐ц繍椤电绱鍒椾慨澶嶄笌鑴忔湡娓呯悊_2026-09-16.md銆嬨��
+
+---
+
+## 浜屽崄涓�銆�2026-07 姣嶇増琛ラ綈 + 瀵煎嚭浠躲�孍xcel 鎵撲笉寮�銆嶆牴鍥犱慨澶�
+
+鏃ユ湡锛�2026-09-16锛堢 9 杞紝鎺ヤ簩鍗佽妭锛�
+
+### 21.1 浠婂ぉ鍋氫簡浠�涔�
+
+| # | 浜嬮」 | 缁撴灉 |
+|---|---|---|
+| 1 | 娓呯悊 2026-09 娈嬬暀鏁版嵁锛堢敤鎴风 1 鏉★級 | **瀹屾垚**锛歨204_vehicle_quarterly 1284 / investment_monthly 31 / audit_result 2061 / audit_run 3 / import_batch 5 / h2032 636锛屽叏閮ㄥ鏍镐负 0 娈嬬暀锛涘凡鐣欏彲杩樺師 SQL 澶囦唤 `_backup_2026-09_residual_all_20260916.sql` |
+| 2 | 淇� 2026-07 瀵煎嚭浠躲�孍xcel 鎵撲笉寮�銆� | **瀹屾垚**锛圥0锛岃 21.2锛� |
+| 3 | 琛ラ綈 2026-07 姣嶇増锛堢敤鎴风 3 鏉°�屽彲浠ヨˉ榻愩�嶏級 | **瀹屾垚**锛堣 21.3锛� |
+| 4 | 淇浠芥瘝鐗堝洖濉妸琛ラ綈銆屾墦鍥炲師褰€�� | **瀹屾垚**锛堣 21.4锛� |
+
+### 21.2 鏍瑰洜锛歰penpyxl 姣嶇増 + 澶囦唤鍥炲~ 鈫� 娈嬬暀 <is> 闈炴硶鏍�
+
+- 鍧忎欢閲� 19 涓牸瀛愬舰濡� `<c r="E15" s="111" t="n"><v>67.0</v><is><t>67.00</t></is></c>`锛歚t="n"` 鍗村甫 `<is>`锛屾ā寮忛潪娉曪紝Excel 鐩存帴鎷掑紑锛圕OM 鎶ャ�屼笉鑳藉彇寰楃被 Workbooks 鐨� Open 灞炴�с�嶏紝杩炰慨澶嶆ā寮� `CorruptLoad=1` 涔熸墦涓嶅紑锛夈��
+- 7 鏈堟瘝鐗堟槸 **openpyxl 鍐欏嚭**锛堟枃鏈瓨 `<is>`锛夛紝8 鏈堟瘝鐗堟槸 **Excel 鍘熺敓**锛堟枃鏈蛋 sharedStrings锛夆啋 鍚屼唬鐮佷笅鍙湁 7 鏈堝潖銆�
+- 瑙﹀彂鑰呮槸 `restoreSummaryMonthlyBlocks`锛�7 鏈堟湁 `_澶囦唤_2026骞�7鏈堚�︽竻鐞嗗墠鈥lsx`锛屾暣鏍煎洖濉椂寰� inlineStr 鏍奸噷鍐欏�硷紝鐣欎笅鏃� `<is>`锛�8 鏈堟病鏈� `_澶囦唤_*`锛屼笉璧板洖濉紝鎵�浠ヤ竴鐩存槸濂界殑銆�
+- 瀹氫綅鎵嬫硶锛堝�煎緱璁颁綇锛夛細鍧忎欢/濂戒欢**闄� worksheets/styles/sharedStrings 澶栧叏閮ㄩ儴浠堕�愬瓧鑺傜浉鍚�** 鈫� zip 鏉備氦 + Excel 閫愪竴寮�妗� leave-one-out 鈫� 閿佸畾 **sheet9銆婂叕浜ゃ��17 鏍� + sheet12銆婅建閬撱�佽疆娓°��2 鏍�**銆�
+
+### 21.3 淇
+
+1. `ReportExportService.exportSummaryWorkbook`锛氳惤鐩樺墠鏂板 `normalizeStaleInlineStrings(wb)`锛屾竻鎺夋墍鏈夈�岄潪 inlineStr 鍗存畫鐣� `<is>`銆嶇殑鏍煎瓙锛堝箓绛� + warn 鏃ュ織锛夈��
+2. `ReportExportService.restoreSummaryMonthlyBlocks`锛氭柊澧� `skipFreightHistoryBlocks`锛屻�� 璐ц繍銆嬮〉 **T 鍒楀強浠ュ悗**锛�2025..2021 浜斾釜骞村害鍧� + 鍚勫勾绱鍒楋級姘镐笉浠庡浠芥瘝鐗堝洖濉� 鈥斺�� 涓庢棦鏈夈�屼腑鍙e緞鎺掑悕宸﹀潡銆嶄繚鎶ゅ悓涓�鎬濊矾锛岄槻銆岀敓鎴愬張澶嶆椿銆嶃��
+
+### 21.4 7 鏈堟瘝鐗堣ˉ榻愶紙Excel COM锛�360 + 324 鏍硷級
+
+鎸� `_fix_mother.ps1`锛�8 鏈堟瘝鐗堥偅鐗堬級**鏁翠綋宸︾Щ 2 鍒�**鏀瑰啓锛�
+
+- 骞村害鍧楋細2025 `T,V,X,Z,AB,AD,AF,AH,AJ,AL,AN,AP`锛�2024 `AV..BR` 闅斿垪锛�2023 `BW..CS` 闅斿垪锛�2022 `DK..DV` 杩炵画锛�2021 `EA..EL` 杩炵画锛涙瘡鍒楀啓 `r7/r9/r8/r10 = SUM(17 甯傚窞)`銆乣r5=r7+r9`銆乣r6=r8+r10` 鈫� **360 鏍�**锛�
+- 绱鍒楋細`DX=SUM(DK:DV)`銆乣EM=SUM(EA:EL)`銆乣DY=IFERROR(DX/SUM(EA:EL)-1,"")`锛岃 5..112 鈫� **324 鏍�**锛�
+- `CalculateFullRebuild` 鍚庝繚瀛樸�傛瘝鐗� 921,559 鈫� 1,440,038 瀛楄妭锛堣浆 Excel 鍘熺敓锛夈��
+
+### 21.5 娴嬭瘯缁撴灉鎽樿
+
+| 鐢ㄤ緥 | 缁撴灉 |
+|---|---|
+| 2026-07 瀵煎嚭锛堜慨澶嶅墠锛� | FAIL锛堝鐜帮級 |
+| 鐜/璺緞鎺掗櫎锛堝皬浠躲�佷袱鏈瘝鐗堛��09-08 鏃у鍑恒�佹敼鍚嶅鍒讹級 | 鍏ㄩ儴 OK锛岀‘璁ら潪鐜闂 |
+| 淇鍚� 2026-07 瀵煎嚭 | **OK sheets=19**锛宍DX5=144979.2825`銆乣DY5=-0.101235487797891`銆乣EM5=161309.53162`銆乣CU5=173045.296428512` |
+| 淇鍚� 2026-08 瀵煎嚭 | **OK sheets=19**锛宍DZ5=144979.2825`銆乣EO5=161309.53162`銆乣CW5=173045.296428512` |
+| 璺ㄦ湀涓�鑷存�� | 7 鏈堜笌 8 鏈堢殑 2022/2021/2023 绱**瀹屽叏鐩哥瓑** |
+| 闈炴硶鏍煎鎵� | 0 涓� |
+| 2026-09 娈嬬暀澶嶆牳 | 5 寮犺〃鍏� 0 |
+
+> 娉細8 鏈堟瘝鐗堣绠楀悗 `DZ5` 鐢辨棫鐨勫啓姝诲父閲� `144979.285376043` 鍙樹负 `144979.2825`锛屽樊 0.0029 鈥斺�� 姝f槸绗崄浜岃妭璁板綍鐨勩�屽叏鐪佽涓嬪父閲� 鈮� 17 甯傚窞涔嬪拰銆嶉偅绗斿樊棰濓紝灞�**淇**鑰岄潪鍥為��銆�
+
+### 21.6 韪╁潙
+
+1. **Excel COM 瀛ゅ効杩涚▼浼氳 `Workbooks.Open` 闂存瓏鎬у亣鎶ュ悓涓�涓敊**锛氭瘡渚嬫祴瀹屽繀椤诲己鏉�鏈鏂板缓鐨� `EXCEL` 杩涚▼銆傛帓鏌ュ垵鏈熷氨鍥犲鍎胯繘绋嬭鍒ゃ��8 鏈堜欢涔熸墦涓嶅紑銆嶏紝娴垂浜嗕竴杞��
+2. `CTWorksheet` **娌℃湁** `isSetSheetData()`锛坰heetData 鏄繀濉級锛岃鐢� `getSheetData() != null`銆�
+3. 姣嶇増琛ラ綈鐨勫浠芥枃浠�**涓嶈兘**鐢� `_澶囦唤_` 鍓嶇紑锛堜細琚� `resolveSummaryDonor` 褰� donor 鍥炲~锛夛紝鏈鐢� `_bak_2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃_琛ラ綈鍓峗20260916.xlsx`銆�
+
+### 21.7 閬楃暀
+
+- 2026-06 / 2026-09 鏃犳瘝鐗� 鈫� 棰勮 `ready=False`銆屾湭鎵惧埌妯℃澘鏂囦欢銆嶏紝闇�鍏堝缓姣嶇増銆�
+- 绗� 8 妫掗仐鐣欐湭鍔細`h2031` 缂� 2025-01銆乣passenger_individual_monthly` 2026-08 缂洪粍鍐堛�乣PASSENGER_AUTH` 11 鏈熷叏 0銆�
+- 浠撳簱鏍� `_*.*`锛堝惈鏈 `_hyb_*` / `_loo_*` / `_v2_*` / `_final_*` / `_fixed_*` / `_t7_*` / `_poijar`锛夋湭鍒狅紝寰呯敤鎴峰悓鎰忋��
+
+璇﹁銆婂姛鑳芥祴璇曟姤鍛�/鍔熻兘娴嬭瘯鎶ュ憡_2026-07姣嶇増琛ラ綈涓庡鍑轰欢鎵撲笉寮�淇_2026-09-16.md銆嬨��
diff --git "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx" "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
index 112d6ff..795b330 100644
--- "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
+++ "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2647\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
Binary files differ
diff --git "a/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\351\227\256\351\242\230\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271\346\261\207\346\200\273_2026-09-16.md" "b/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\351\227\256\351\242\230\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271\346\261\207\346\200\273_2026-09-16.md"
index 7a0bd86..a4ecacb 100644
--- "a/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\351\227\256\351\242\230\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271\346\261\207\346\200\273_2026-09-16.md"
+++ "b/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\351\227\256\351\242\230\344\270\216\346\263\250\346\204\217\344\272\213\351\241\271\346\261\207\346\200\273_2026-09-16.md"
@@ -243,3 +243,47 @@
 | 12 | 姣嶇増缁� Excel 閲嶅瓨鍚庝綋绉� 959,706 -> 1,492,121 瀛楄妭锛堝鍑轰欢 950,186 -> 1,331,599锛� | 绾牸寮忓紑閿�锛屾暟鎹棤褰卞搷 | 璁板綍 |
 
 璇﹁銆婂姛鑳芥祴璇曟姤鍛�/鍔熻兘娴嬭瘯鎶ュ憡_璐ц繍椤电绱鍒椾慨澶嶄笌鑴忔湡娓呯悊_2026-09-16.md銆嬨��
+
+---
+
+## 鍗佷笁銆�2026-09-16 琛ュ厖锛�2026-07 姣嶇増琛ラ綈 & 瀵煎嚭浠躲�孍xcel 鎵撲笉寮�銆嶆牴鍥狅紙P0锛�
+
+### 13.1 鐥囩姸涓庢牴鍥�
+
+| 椤� | 鍐呭 |
+|---|---|
+| 鐥囩姸 | `GET /api/report/export/summaryWorkbook?period=2026-07&mode=month` 鐢熸垚鐨� xlsx锛�**Excel 鎵撲笉寮�**锛圕OM 鎶ャ�屼笉鑳藉彇寰楃被 Workbooks 鐨� Open 灞炴�с�嶏紱`CorruptLoad=1` 淇妯″紡鍚屾牱鎵撲笉寮�锛夛紱2026-08 鍚屾帴鍙f甯� |
+| 鐩存帴鍘熷洜 | 瀵煎嚭浠堕噷鏈� **19 涓ā寮忛潪娉曟牸**锛歚<c r="E15" s="111" t="n"><v>67.0</v><is><t>67.00</t></is></c>` 鈥斺�� `t="n"` 涓嶅厑璁稿甫 `<is>`锛坕nlineStr 涓撶敤锛� |
+| 娣卞眰鍘熷洜 | 7 鏈堟瘝鐗堢敱 **openpyxl** 鍐欏嚭锛坄docProps/app.xml` = `Microsoft Excel Compatible / Openpyxl 3.1.5`锛屾枃鏈瓨 `<is>`锛夛紱8 鏈堟瘝鐗堟槸 **Excel 鍘熺敓**锛堟枃鏈蛋 sharedStrings锛夈�侾OI 鐨勯儴鍒嗗啓鍏ヨ矾寰勫彧鏀� `t`/`<v>`銆佷笉娓呮棫 `<is>` |
+| 瑙﹀彂璺緞 | 7 鏈堝瓨鍦� `_澶囦唤_2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃_娓呯悊鍓峗20260904.xlsx` 鈫� `restoreSummaryMonthlyBlocks` 鏁存牸鍥炲~ 鈫� 寰� inlineStr 鏍奸噷鍐欏�肩暀涓嬫棫 `<is>`銆�8 鏈堟棤 `_澶囦唤_*`锛屼笉璧板洖濉紝鏁呮甯� |
+| 鍛戒腑浣嶇疆 | leave-one-out 瀹氫綅鍒� **sheet9銆婂叕浜ゃ��17 鏍� + sheet12銆婅建閬撱�佽疆娓°��2 鏍�** |
+
+### 13.2 淇锛坄traffic-audit-server`锛�
+
+1. **`exportSummaryWorkbook` 鏂板 `normalizeStaleInlineStrings(wb)`**锛氳惤鐩樺墠娓呮帀鎵�鏈夈�岄潪 `inlineStr` 鍗存畫鐣� `<is>`銆嶇殑鏍煎瓙锛堝箓绛夛級锛屽懡涓嵆鎵� warn 鏃ュ織銆�
+2. **`restoreSummaryMonthlyBlocks` 鏂板 `skipFreightHistoryBlocks`**锛氥�� 璐ц繍銆嬮〉 **T 鍒楀強浠ュ悗**锛�2025/2024/2023/2022/2021 骞村害鍧� + 鍚勫勾绱/绱鍚屾瘮鍒楋級**姘镐笉浠庡浠芥瘝鐗堝洖濉�** 鈥斺�� 涓庢棦鏈夈�屼腑鍙e緞鎺掑悕宸﹀潡姘镐笉鍥炲~銆嶅悓涓�鎬濊矾锛岄伩鍏嶈ˉ榻愯銆岀敓鎴愬張澶嶆椿銆嶃��
+
+### 13.3 2026-07 姣嶇増琛ラ綈锛堝彛寰勪笌 8 鏈堟瘝鐗堝榻愶級
+
+- 骞村害鍧楋紙姣忓垪锛夛細`r7/r9/r8/r10 = SUM(17 甯傚窞瀵瑰簲琛�)`銆乣r5 = r7+r9`銆乣r6 = r8+r10` 鈫� 360 鏍硷紱
+- 绱鍒楋細`DX = SUM(DK:DV)`锛�2022锛夈�乣EM = SUM(EA:EL)`锛�2021锛屽師**鏁村垪涓虹┖**锛夈�乣DY = IFERROR(DX/SUM(EA:EL)-1,"")`锛�2022 绱鍚屾瘮锛屽師涓�**鍐欐甯搁噺**锛夆啋 324 鏍硷紱
+- 2023 绱 `CU = BW+BY+鈥�+CS` 鏈潵灏辨纭紝鏈敼锛沗EN`锛�2021 绱鍚屾瘮锛夋寜鍙e緞淇濇寔涓虹┖銆�
+- 涓�鎵嬭瘉鎹細姣嶇増 `DX5=144979.2825`锛堟棫甯搁噺 `144979.285376043`锛屽樊 0.0029 = 鍏ㄧ渷瑙勪笅甯搁噺涓� 17 甯傚窞涔嬪拰鐨勫樊锛夈�乣EM5=161309.53162`銆乣CU5=173045.296428512`锛屼笌 8 鏈堟瘝鐗� `DZ5/EO5/CW5` **瀹屽叏鐩哥瓑**銆�
+- 澶囦唤锛歚docs/鐢熸垚姹囨�诲ぇ琛�/_bak_2026骞�7鏈堥亾璺繍杈撻噺姹囨�昏〃_琛ラ綈鍓峗20260916.xlsx`銆�**鍒囧嬁鏀瑰悕涓� `_澶囦唤_` 寮�澶�**锛屽惁鍒欎細琚� `resolveSummaryDonor` 褰� donor 鍥炲~銆�
+
+### 13.4 鏈鏂板鐨勬帓鏌ュ潙
+
+| 闂 | 鍘熷洜 | 澶勭疆 |
+|---|---|---|
+| Excel COM **闂存瓏鎬�**鎶ュ悓涓�涓敊锛屽鑷磋鍒ゃ��8 鏈堜欢涔熸墦涓嶅紑銆� | 姣忔 `New-Object -ComObject Excel.Application` 鐣欎笅鐨�**瀛ゅ効 EXCEL 杩涚▼**浼氭薄鏌撳悗缁疄渚� | 姣忎緥娴嬪畬鎶娿�屾湰娆℃柊寤虹殑 EXCEL 杩涚▼銆嶅己鏉�鍐嶆祴涓嬩竴渚嬶紱`Quit()`+`ReleaseComObject` 骞朵笉澶� |
+| 缂栬瘧鎶ャ�屾壘涓嶅埌 isSetSheetData()銆� | `CTWorksheet.sheetData` 鏄� XSD **蹇呭~**鍏冪礌锛屼笉鐢熸垚 `isSetXxx` | 鏀圭敤 `ctw.getSheetData() != null` |
+| 閮ㄤ欢绾� diff 澶ぇ璺戜笉鍔� | 瀵� 519KB 鐨� `styles.xml` 鐩存帴 `difflib` 鏄� O(n虏) | 鍏堟寜閮ㄤ欢姣斿瓧鑺傚昂瀵�/鏄惁鐩哥瓑锛屽彧鍦ㄥ繀瑕佺殑灏忛儴浠朵笂鍋� diff |
+
+### 13.5 閬楃暀闂澧為噺
+
+| # | 闂 | 褰卞搷 | 鐘舵�� |
+|---|---|---|---|
+| 13 | 2026-06 / 2026-09 鏃犳瘝鐗� | 棰勮 `ready=False`銆屾湭鎵惧埌妯℃澘鏂囦欢銆嶏紝鏃犳硶鍑烘暟 | 闇�鍏堝缓姣嶇増锛堢敤鎴风 5 闂殑寤朵几锛� |
+| 14 | 浠撳簱鏍� `_*.*` 涓存椂鏂囦欢缁х画澧炲锛坄_hyb_*` / `_loo_*` / `_v2_*` / `_final_*` / `_fixed_*` / `_t7_*` / `_poijar`锛� | 浣撶Н/鍙鎬� | 缁忕敤鎴峰悓鎰忓悗鍐嶆竻鐞� |
+
+> 绗� 10 椤癸紙2026-07 瀵煎嚭浠跺皯 2 鍒� / 7 鏈堟瘝鐗堟槸銆�1-4 鏈堥鏋躲�嶏級鏈妭宸插鐞嗭細瀵煎嚭绔細**鑷姩琛ュ嚭 5/6/7 鏈堣〃澶翠笌鍏紡**骞堕噸绠楃疮璁″叕寮忥紝姣嶇増宸茶ˉ榻� 2021/2022/2023 绱鍒楋紝鏁呭叧闂椤广��
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
index b006de5..46ae09f 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
@@ -3360,12 +3360,41 @@
                     + "鎸夈�婄敓鎴恄閬撹矾杩愯緭閲忔眹鎬昏〃銆嬪榻愬垪瀹藉垪鏁�={}锛岀己鏁版彁绀�={}",
                     dbFilled, yoyFilled, monthFormulaFilled, rankRefreshed, cumulativeRefreshed, widthApplied, dbProblems);
             applyTwoDecimalFormat(wb); // 鏁板�兼樉绀轰袱浣嶅皬鏁帮紙淇濈暀鍏ㄧ簿搴︼級锛�% / 鏃ユ湡绛夋棦鏈夋牱寮忎笉鏀瑰彉
+            int inlineFixed = normalizeStaleInlineStrings(wb); // 娓呮帀銆岄潪 inlineStr 鍗存畫鐣� <is>銆嶇殑闈炴硶鏍硷紝鍚﹀垯 Excel 鎷掔粷鎵撳紑
+            if (inlineFixed > 0) log.warn("姹囨�诲伐浣滅翱娓呮帀娈嬬暀 inlineStr 闈炴硶鏍� {} 涓紙姣嶇増鐢� openpyxl 鍐欏嚭鏃剁殑鍏稿瀷闂锛�", inlineFixed);
             if (!wb.getCTWorkbook().isSetCalcPr()) wb.getCTWorkbook().addNewCalcPr();
             wb.getCTWorkbook().getCalcPr().setFullCalcOnLoad(true); // 杩樺師/鏀瑰啓鍏紡鍚庢墦寮�鍗抽噸绠�
             return toBytes(wb);
         } finally {
             ZipSecureFile.setMinInflateRatio(savedZipRatio);
         }
+    }
+
+    /**
+     * 娓呮帀銆岄潪 inlineStr 鍗存畫鐣� &lt;is&gt;銆嶇殑闈炴硶鍗曞厓鏍笺��
+     *
+     * 姣嶇増鑻ョ敱 openpyxl 鍐欏嚭锛屾枃鏈崟鍏冩牸鐢� &lt;is&gt;锛坕nlineStr锛夊瓨鍌紱POI 鐨� setCellValue 鍙敼鍐� t 涓� &lt;v&gt;锛�
+     * 涓嶄細娓呮帀鏃� &lt;is&gt;锛屼簬鏄骇鍑� &lt;c t="n"&gt;&lt;v&gt;67.0&lt;/v&gt;&lt;is&gt;&lt;t&gt;67.00&lt;/t&gt;&lt;/is&gt;&lt;/c&gt; 杩欑闈炴硶鏍硷紝
+     * Excel 鍒ゅ畾涓恒�屾棤娉曡鍙栫殑鍐呭銆嶈�岀洿鎺ユ嫆缁濇墦寮�锛圕OM 琛ㄧ幇涓恒�屼笉鑳藉彇寰楃被 Workbooks 鐨� Open 灞炴�с�嶏級銆�
+     * 2026-07 瀵煎嚭浠跺嵆鍥犳鎵撲笉寮�锛堛�婂叕浜ゃ��17 鏍� +銆婅建閬撱�佽疆娓°��2 鏍硷級銆傝惤鐩樺墠缁熶竴娓呯悊锛屽箓绛夈��
+     */
+    private int normalizeStaleInlineStrings(XSSFWorkbook wb) {
+        int fixed = 0;
+        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
+            org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet ctw = wb.getSheetAt(i).getCTWorksheet();
+            if (ctw == null || ctw.getSheetData() == null) continue;
+            for (org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow row : ctw.getSheetData().getRowArray()) {
+                for (org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell c : row.getCArray()) {
+                    if (!c.isSetIs()) continue;
+                    STCellType.Enum t = c.getT();
+                    if (t == null || !STCellType.INLINE_STR.equals(t)) {
+                        c.unsetIs();
+                        fixed++;
+                    }
+                }
+            }
+        }
+        return fixed;
     }
 
     /**
@@ -4454,6 +4483,9 @@
             if (bs == null) continue;
             // 涓彛寰勬帓鍚嶉〉 A..H 闄堟棫宸﹀潡宸蹭簬 2026-09-09 鎷嶆澘鏁村潡鍒犻櫎锛氳鍖哄煙姘镐笉浠庡浠芥瘝鐗堝洖濉紝閬垮厤鈥滅敓鎴愬張澶嶆椿鈥�
             boolean skipMidRankLeftBlock = "涓彛寰勬帓鍚�".equals(ds.getSheetName());
+            // 銆� 璐ц繍銆嬮〉 2025..2021 骞村害鍧楋紙T 鍒楄捣锛屽惈鍚勫勾绱/绱鍚屾瘮鍒楋級鍦ㄦ瘝鐗堥噷鏄�屽競宸炴淳鐢熷叕寮忋�嶏紝
+            // 澶囦唤姣嶇増鍚屽尯浠嶆槸鏃х殑鍐欐甯搁噺锛堝叏鐪佽涓嬬瓑锛夛紝鍥炲~浼氳 2021/2022/2023 绱鍙堝涓嶄笂锛堚�滅敓鎴愬張澶嶆椿鈥濓級锛屾晠璇ュ尯涓嶅洖濉��
+            boolean skipFreightHistoryBlocks = " 璐ц繍".equals(ds.getSheetName());
             for (int r = ds.getFirstRowNum(); r <= ds.getLastRowNum(); r++) {
                 Row dr = ds.getRow(r);
                 if (dr == null) continue;
@@ -4461,6 +4493,7 @@
                 for (Cell dc : dr) {
                     if (dc == null) continue;
                     if (skipMidRankLeftBlock && dc.getColumnIndex() < 8) continue;
+                    if (skipFreightHistoryBlocks && dc.getColumnIndex() >= 19) continue; // T 鍒楀強浠ュ悗 = 2025..2021 骞村害鍧�
                     CellType t = dc.getCellType();
                     if (t == CellType.BLANK) continue;
                     String dtx = summaryCellText(dc);

--
Gitblit v1.9.1