| .gitignore | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| HANDOFF.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/工具/汇总大表差异比对.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/问题汇总/汇总大表_差异明细_2026-08_20260928.csv | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/问题汇总/汇总大表_差异明细_2026-08_20260928.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/问题汇总/汇总大表_差异明细_2026-08_20260928_桌面导出版.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.gitignore
@@ -110,3 +110,7 @@ docs/工使¥ç»/ # ==== æ¬å°å¤ä»½ï¼ä¸å ¥åºï¼2026-09-27ï¼==== _backups/ # æ±æ»å¤§è¡¨å·®å¼æ¯å¯¹æ¸ åï¼è¿ç¨äº§ç©ï¼åªçæ¬å°ï¼ docs/é®é¢æ±æ»/_*.md docs/é®é¢æ±æ»/_*.csv HANDOFF.md
@@ -15,12 +15,10 @@ - **â ç线å 车åè¡¥å®æï¼09-28 ä¸åï¼**ï¼ç¨æ·ç¡®è®¤åæ 09-27 æ¯çå¤ä»½ï¼`_bak_202608æ¯çææ¬æ°å转æ°å¼å_20260927.xlsx`ï¼XML ç²¾ååè¡¥ãç线å 车ã2019/2020 å ââ **è¯¥é¡µä¸ 09-27 æ¯çéæ ¼ä¸è´ï¼0 å·®å¼ï¼**ï¼é误å¼åå° `#REF!` 8 / `#DIV/0!` 228ï¼æ¯çå ¶å®é¡µæªåå½±åãéªæ¶çæï¼ä¸ 09-27 çæä»¶ (6) æ¯å¯¹é误å¼é页ä¸è´ï¼å·®å¼ä» 婿¢å®æ¹å¨ï¼` è´§è¿` 78 æ ¼æ¸ 0ãä¸å£å¾æç» 4915 æ ¼å åä½ç§»ãä¸å£å¾æå 672 æ ¼åä½ç§»ãç线å 车 82 æ ¼æµ®ç¹å°¾å·®/0-空ï¼ã - **差弿¸ åå£å¾æ´æ°ï¼09-28ï¼ç¨æ·ç¡®è®¤ï¼**ï¼â ` è´§è¿` æ°å¢çãè§ä¸+è§ä¸è´§è¿éããè§ä¸è´§è¿éãå 17 è¡ï¼æ¯ç设计ï¼å ± 34 è¡ï¼ä¸è®¡å·®å¼ï¼â¡ ` è´§è¿!U5:U112` æ 表头è稿åä¸è®¡ï¼â¢ æå表ã彿åã为æ¯ç设计ä¸è®¡ï¼â£ å¸å·çå/å ¨åä¸å½±åï¼å·¥å ·å½ä¸åï¼ï¼â¤ å°å·®å¼ï¼åæ´å°¾å·®/ææ¬åæ°åï¼åªè®¡æ°ï¼åªåå·®å¼å¤§çå¹¶éåå ãå·¥å · `docs/å·¥å ·/æ±æ»å¤§è¡¨å·®å¼æ¯å¯¹.py` å·²ææ¤æ´æ°ï¼ä¸¤ä»½æ¸ åå·²éçæã - **æ°åç°ï¼å¾ æ ¸å¯¹ï¼**ï¼`ç线å 车!EO36/FN36/FO36`ï¼èé¨ å®¢è¿é 2020 累计/ç´¯è®¡åæ¯ï¼**ç¨åºçææ¶éç®ä¸º -2731.41 / -1.0008 / -1.0002**ï¼èæ¯ç䏿工å®ç¨¿å为 0.181777 / 2312.2199 / -0.586419 â çæ¯ç 2020 å¹´ååæ¯ä¸º 0ï¼éæ ¸å¯¹å ¬å¼ä¸æ°æ®ã - **æ°å¢å·®å¼æ¸ åå·¥å ·ï¼09-28ï¼**ï¼`docs/å·¥å ·/æ±æ»å¤§è¡¨å·®å¼æ¯å¯¹.py`ï¼é页æè¡æ ç¾/å表头åºå对é½ï¼å¯å¤çå¤å/å¤è¡/éå¤è¡¨å¤´ï¼ï¼äº§ç© `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨_差弿ç»_2026-08_20260928.md` + `.csv`ï¼1401 æ¡æç»ï¼æ å®è´¨æ°å¼å·®å¼ï½ä» æå·¥æï½ä» ç¨åºæï½åæ´å°¾å·®ï½ææ¬åæ°åï½ææ¬ä¸åï½éè¯¯å¼ åç±»ï¼ã - ç»è®ºï¼` è´§è¿` å®è´¨æ°å¼å·®å¼ **10 æ¡**ï¼2022 å¹´åå¸å·ç´¯è®¡åæ¯ï¼ä¸å¡å·²ç¡®è®¤è½¯ä»¶å¯¹ï¼ï¼`å ¬äº¤/åå¸å®¢è¿/ä¸å£å¾æç»/ä¸å£å¾å®¢è¿é` ç"ä» æå·¥æ"峿工侧**è稿å**ï¼72/36/90/180 æ ¼ï¼ï¼`å ¬äº¤/轨é轮渡` ç"ææ¬åæ°å"= å¼ç¸åä» ç±»åä¸åï¼`è´§è¿éæå/è´§è¿å¨è½¬éæå/ç线å 车` çå·®å¼å«**è¡åéä½åå·®å¼**ï¼å·²å¨è¯¥æ¸ å"é 读æç¤º"䏿 注ï¼éæè¡æ ç¾æ ¸å¯¹ï¼ã - æ´æ£ï¼09-28 ä¸åä¸åº¦è®¤ä¸º"2020 累计/ç´¯è®¡åæ¯"æå·®å¼ï¼å®ä¸ºå¯¹é½èæ¬è¯¯é åæè´ââæä½ç½®éæ ¼æ ¸å¯¹ä¸¤è¾¹ä¸è´ï¼æªåæ¹å¨ã - **差弿¸ åå·²å®è·ï¼09-28 æï¼**ï¼æå½åæ¯çéæ°çæ 2026-08ï¼çæä»¶å `docs/çææ±æ»å¤§è¡¨/è¾åº/_夿 ¸çæ_2026-08_20260928.xlsx`ï¼è¯¥ç®å½è¢«å¿½ç¥ä¸å ¥åºï¼ï¼äº§åºä¸¤ä»½æ¸ åï¼ - `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨_差弿ç»_2026-08_20260928.md/.csv`ï¼æ¯çææ°çæä»¶ vs æå·¥å®ç¨¿ï¼1401 æ¡ï¼ - `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨_差弿ç»_2026-08_20260928_æ¡é¢å¯¼åºç.md/.csv`ï¼æ¡é¢å¯¼åºç vs æå·¥å®ç¨¿ï¼1333 æ¡ï¼è¯¥ä»½å¯¼åºè¾æ©ã` è´§è¿` åè¾¹æ ¼å° 74 æ ¼ï¼å¤æ ¸ä»¥æ¯çææ°çæä»¶ä¸ºåï¼ - **æ±æ»å¤§è¡¨å·®å¼æ¯å¯¹ï¼09-28ï¼å·¥å ·å·²åºåå£å¾ï¼**ï¼`docs/å·¥å ·/æ±æ»å¤§è¡¨å·®å¼æ¯å¯¹.py`ï¼é页æè¡/åæ ç¾åºå对é½ï¼å¯å¤çå¤å/å¤è¡/éå¤è¡¨å¤´ï¼ã**æ¸ åå±è¿ç¨äº§ç©åªçæ¬å°**ï¼`docs/é®é¢æ±æ»/_æ¸ å_*.md/.csv`ï¼å·² gitignore ä¸å ¥åºï¼ã - 已确认å£å¾ï¼ä¸åéå¤ç¡®è®¤/䏿¥ï¼ï¼â è´§è¿æ¯å¸å· 6 è¡ vs æå·¥ 4 è¡ï¼æ°å¢ãè§ä¸+è§ä¸è´§è¿éããè§ä¸è´§è¿éãå 17 è¡ï¼å±æ¯ç设计ï¼è¡å·åç§»æ"å°åº+ææ "对é½åä¸è´ï¼â¡ ` è´§è¿` U åï¼U2:U118ï¼ä¸ºäººå·¥è稿ï¼â¢ ä» æå·¥æä¸**æ 表头**çå = è稿ï¼â£ æµ®ç¹å°¾å·®ãææ¬åæ°å忽ç¥ï¼â¤ æå表ã彿åã为æ¯ç设计ï¼â¥ å¸å·çå/å ¨åä¸å½±åã - **éå¤çï¼æ°å¼ï¼**ï¼`ç线å 车!EO36/FN36/FO36`ï¼èé¨ å®¢è¿é 2020 累计/ç´¯è®¡åæ¯ï¼ââç¨åºçææ¶éç®ä¸º -2731.41 / -1.0008 / -1.0002ï¼æ¯ç䏿工å®ç¨¿å为 0.181777 / 2312.2199 / -0.586419ï¼çæ¯ç 2020 å¹´ååæ¯ä¸º 0ï¼ï¼å¾ æ ¸å¯¹ï¼` è´§è¿` 2022 å¹´åå¸å·ãç´¯è®¡åæ¯ã10 æ¡ï¼ä¸å¡å·²ç¡®è®¤**软件对**ï¼ä¸æ¹ï¼ã - å ¶ä½å¾ åï¼æå·¥ä¾§ 4 å¤èæ°æ®ï¼`ç线å 车!IL4/IL5` æé¾ã`IL50` åå¼å·ã` è´§è¿!EA93/EA111` ç `#DIV/0!`ï¼ã286 æ ¼ææ¬åæ°åã304 æ ¼è稿åï¼æ¯ç 11 个 `#REF!` + 356 个 `#DIV/0!`ï¼`åå¸å®¢è¿` 第 2 è¡ç¬¬ 3 个æèµ·è¡¨å¤´ä¸ºæ¥æåºåå·ï¼ç¼º 2026-09 æ¯çï¼å¯¼åºååºæ°ä½æ£ï¼P0-3ï¼ã - **å¾ å**ï¼â æåé¡µç»æï¼å顺åºãæ 颿ªè¾ãå¸å·åçå/å ¨åãå¨è½¬éæåå¤ 7 è¡ï¼ï¼â¡ æåé¡µç»æï¼å顺åºãæ 颿ªè¾ãå¸å·åçå/å ¨åãå¨è½¬éæåå¤ 7 è¡ï¼ï¼â¢ 缺 2026-09 æ¯çã导åºååºæ°ä½æ£ï¼P0-3ï¼ã ## ææ°ï¼2026-09-27ï¼ docs/¹¤¾ß/»ã×Ü´ó±í²îÒì±È¶Ô.py
@@ -109,6 +109,19 @@ """ def main(gen, dgf, prefix): ACTION = ("å®è´¨æ°å¼å·®å¼", "é误å¼(ç¨åº)", "é误å¼(æå·¥)", "ææ¬ä¸å") IGNORE = ("已忽ç¥(åè¾¹æå¼)", "已忽ç¥(ç»æ/设计)", "忴尾差(å¯å¿½ç¥)", "ææ¬åæ°å(å¯å¿½ç¥)", "å·²ç¥è®¾è®¡(æ¯çæ°å¢è¡)", "å·²ç¥è®¾è®¡(æ 表头è稿å)", "å·²ç¥è®¾è®¡(æåè¡¨å½æ/累计å)", "å ¶å®") cats = list(ACTION) + list(IGNORE) REASON = {(" è´§è¿", "EA"): "2022å¹´åå¸å·ç´¯è®¡åæ¯ï¼ä¸å¡å·²ç¡®è®¤è½¯ä»¶å£å¾æ£ç¡®ï¼æå·¥é£åéï¼", ("ç线å 车", "EO"): "ç¨åºçææ¶éç®ï¼çæ¯ç2020å¹´ååæ¯ä¸º0ï¼ï¼æ¯ç/æå·¥ä¸º 0.1818ï¼å¾ æ ¸å¯¹", ("ç线å 车", "FN"): "åä¸ï¼æ¯ç/æå·¥ä¸º 2312.2199", ("ç线å 车", "FO"): "åä¸ï¼æ¯ç/æå·¥ä¸º -0.5864"} def reason_of(x): ref = x[1] col = "".join(ch for ch in ref if ch.isalpha()) return REASON.get((x[0], col), "") g = load_workbook(gen, data_only=True); d = load_workbook(dgf, data_only=True) rows_out = [] per_sheet = [] @@ -131,24 +144,26 @@ if c < 2: continue if cl_g[c] == "(æ 表头å)": bump("å·²ç¥è®¾è®¡(æ 表头è稿å)"); continue bump("ä» ç¨åºæ(å)"); rows_out.append([sh, "%s*" % get_column_letter(c+1), "ï¼æ´åï¼", cl_g[c], "ä» ç¨åºæ(å)", "", "", "çæä»¶å¤åºæ¤å"]) bump("已忽ç¥(ç»æ/设计)") for c in unmatched_cols_d: if c < 2: continue if cl_d[c] == "(æ 表头å)": bump("å·²ç¥è®¾è®¡(æ 表头è稿å)"); continue bump("ä» æå·¥æ(å)"); rows_out.append([sh, "ï¼æ ï¼", "ï¼æ´åï¼", cl_d[c], "ä» æå·¥æ(å)", "", "", "æå·¥å®ç¨¿å¤åºæ¤å"]) bump("已忽ç¥(ç»æ/设计)") for r in unmatched_rows_g: if r < 4: continue rowb = "%s" % wg.cell(row=r+1, column=2).value if is_known_extra_row(sh, rowb, "ç¨åº"): bump("å·²ç¥è®¾è®¡(æ¯çæ°å¢è¡)"); continue bump("ä» ç¨åºæ(è¡)"); rows_out.append([sh, "第%dè¡" % (r+1), rl_g[r], "ï¼æ´è¡ï¼", "ä» ç¨åºæ(è¡)", "", "", "çæä»¶å¤åºæ¤åºæ®µ"]) bump("已忽ç¥(ç»æ/设计)") for r in unmatched_rows_d: if r < 4: continue if "彿å" in rl_d[r] or "累计å" in rl_d[r]: bump("å·²ç¥è®¾è®¡(æåè¡¨å½æ/累计å)"); continue bump("ä» æå·¥æ(è¡)"); rows_out.append([sh, "ï¼æ ï¼", rl_d[r], "ï¼æ´è¡ï¼", "ä» æå·¥æ(è¡)", "", "", "æå·¥å®ç¨¿å¤åºæ¤åºæ®µ"]) bump("已忽ç¥(ç»æ/设计)") for i, j in sorted(colmap.items()): if cl_g[i] == "(æ 表头å)" or cl_d[j] == "(æ 表头å)": bump("å·²ç¥è®¾è®¡(æ 表头è稿å)"); continue for p, q in sorted(rowmap.items()): vg = wg.cell(row=p+1, column=i+1).value; vd = wd.cell(row=q+1, column=j+1).value if vg == vd: continue @@ -165,9 +180,9 @@ else: cat = "å®è´¨æ°å¼å·®å¼" note = "å·®=%.6g" % diff elif num(vg) and (vd is None): cat = "ä» ç¨åºæ"; cat = "已忽ç¥(åè¾¹æå¼)" elif num(vd) and (vg is None): cat = "ä» æå·¥æ" cat = "已忽ç¥(åè¾¹æå¼)" elif tg is not None and num(vd) and abs(tg - vd) <= 1e-9: cat = "ææ¬åæ°å(å¯å¿½ç¥)"; note = "æå·¥ä¸ºææ¬'%s'" % vg elif td is not None and num(vg) and abs(td - vg) <= 1e-9: @@ -190,9 +205,9 @@ with io.open(csv, "w", encoding="utf-8-sig", newline="") as f: f.write("页ç¾,çæä»¶åå æ ¼,è¡æ ç¾,å表头,ç±»å«,çæä»¶å¼,æå·¥å¼,夿³¨\n") for x in rows_out: if x[4] not in ACTION: continue f.write(",".join('"%s"' % str(v).replace('"', "'") for v in x) + "\n") # è¾åº MD cats = ["å®è´¨æ°å¼å·®å¼", "é误å¼(ç¨åº)", "é误å¼(æå·¥)", "ææ¬ä¸å", "ä» æå·¥æ", "ä» ç¨åºæ", "ä» ç¨åºæ(å)", "ä» æå·¥æ(å)", "ä» ç¨åºæ(è¡)", "ä» æå·¥æ(è¡)", "忴尾差(å¯å¿½ç¥)", "ææ¬åæ°å(å¯å¿½ç¥)", "å·²ç¥è®¾è®¡(æ¯çæ°å¢è¡)", "å·²ç¥è®¾è®¡(æ 表头è稿å)", "å·²ç¥è®¾è®¡(æåè¡¨å½æ/累计å)", "å ¶å®"] md = prefix + ".md" with io.open(md, "w", encoding="utf-8", newline="\n") as f: f.write("# æ±æ»å¤§è¡¨å·®å¼æç»ï¼çæä»¶ vs æå·¥å®ç¨¿ï¼\n\n") @@ -200,17 +215,20 @@ f.write("## éé¡µæ±æ»\n\n| é¡µç¾ | " + " | ".join(cats[:7]) + " |\n|---|" + "---|"*7 + "\n") for sh, cnt in per_sheet: f.write("| %s | %s |\n" % (sh, " | ".join(str(cnt.get(c, 0)) for c in cats[:7]))) f.write("\n## å®è´¨æ°å¼å·®å¼ï¼å ¨é¨ï¼\n\n") subs = [x for x in rows_out if x[4] == "å®è´¨æ°å¼å·®å¼"] f.write("\n## éå¤çå·®å¼ï¼å ¨é¨ï¼å«åå ï¼\n\n") subs = [x for x in rows_out if x[4] in ACTION and x[4] != "ææ¬ä¸å"] if not subs: f.write("ï¼æ ï¼\n") for x in subs[:200]: f.write("- %s %s [%s] çæä»¶=%s æå·¥=%sï¼%sï¼\n" % (x[0], x[1], x[2], x[5], x[6], x[7])) f.write("\n## ä» æå·¥æï¼å 200 æ¡ï¼\n\n") for x in [y for y in rows_out if y[4] in ("ä» æå·¥æ", "ä» æå·¥æ(å)")][:200]: f.write("- %s %s [%s] %s æå·¥=%s\n" % (x[0], x[1], x[2], x[3], x[6])) f.write("\n## ä» ç¨åºæï¼å 200 æ¡ï¼\n\n") for x in [y for y in rows_out if y[4] in ("ä» ç¨åºæ", "ä» ç¨åºæ(å)", "ä» ç¨åºæ(è¡)")][:200]: f.write("- %s %s [%s] %s çæä»¶=%s\n" % (x[0], x[1], x[2], x[3], x[5])) for x in subs[:300]: f.write("- **%s** %s [%s] çæä»¶=%s æå·¥=%s%s\n" % (x[0], x[1], x[2], x[5], x[6], ("ï¼åå ï¼%sï¼" % reason_of(x)) if reason_of(x) else "")) f.write("\n## æ é¢/表头æªè¾å·®å¼\n\n") tt = [x for x in rows_out if x[4] == "ææ¬ä¸å"] if not tt: f.write("ï¼æ ï¼\n") for x in tt[:50]: f.write("- %s %s [%s] çæä»¶=%s æå·¥=%s\n" % (x[0], x[1], x[2], x[5], x[6])) f.write("\n## å·²æå£å¾å¿½ç¥ï¼ä» 计æ°ï¼æç»è§ CSV ä¹å¤ä¸ååºï¼\n\n| é¡µç¾ | " + " | ".join(IGNORE) + " |\n|---|" + "---|"*len(IGNORE) + "\n") for sh, cnt in per_sheet: f.write("| %s | %s |\n" % (sh, " | ".join(str(cnt.get(c, 0)) for c in IGNORE))) print("å·²è¾åº:", md, "|", csv, "| æç»æ¡æ°:", len(rows_out)) for sh, cnt in per_sheet: if cnt: print(" %-12s %s" % (sh, dict(cnt))) docs/ÎÊÌâ»ã×Ü/»ã×Ü´ó±í_²îÒìÃ÷ϸ_2026-08_20260928.csv
File was deleted docs/ÎÊÌâ»ã×Ü/»ã×Ü´ó±í_²îÒìÃ÷ϸ_2026-08_20260928.md
File was deleted docs/ÎÊÌâ»ã×Ü/»ã×Ü´ó±í_²îÒìÃ÷ϸ_2026-08_20260928_×ÀÃæµ¼³ö°æ.md
File was deleted