| | |
| | | for k in range(i2-i1): pairs[i1+k] = j1+k |
| | | return pairs |
| | | |
| | | NOTE = """ |
| | | > **已确认å£å¾ï¼2026-09-28ï¼ç¨æ·ï¼ââ以ä¸ä¸è®¡å
¥é®é¢** |
| | | > 1. ` è´§è¿` æ¯å¸å· 6 è¡ vs æå·¥ 4 è¡ï¼ç¨åºæ°å¢ãè§ä¸+è§ä¸è´§è¿éï¼ä¸å¨ï¼ããè§ä¸è´§è¿éï¼ä¸å¨ï¼ãå 17 è¡ï¼å
± 34 è¡ï¼ï¼å±æ¯ç设计 â å½å
¥ãå·²ç¥è®¾è®¡(æ¯çæ°å¢è¡)ãã |
| | | > å è¡æ°ä¸åï¼ç¬¬ k 个å¸å·å¨ç¨åºéæ¯æå·¥ä½ 2Ã(k-1) è¡ï¼æ¦æ±é½ä»ç¬¬ 11 è¡èµ·ï¼é»ç³ ç¨åº 17 / æå·¥ 15ï¼ç¥åæ¶ ç¨åº 107 / æå·¥ 75ï¼ââ**纯ä½ç½®åç§»ï¼æ"å°åº+ææ "对é½åæ°å¼ä¸è´**ã |
| | | > 2. ` è´§è¿!U5:U112`ï¼æ 表头è¾
å©åï¼æ¯äººå·¥è稿 â å½å
¥ãå·²ç¥è®¾è®¡(æ 表头è稿å)ãã |
| | | > 3. åæå表ã彿åãæ¯å½ååæ¯çæ¶å°±å ä¸ç设计 â å½å
¥ãå·²ç¥è®¾è®¡(æåè¡¨å½æ/累计å)ãã |
| | | > 4. å¸å·åçå/å
¨åï¼æ¦æ± vs æ¦æ±å¸ï¼ä¸å½±å â å·²åå½ä¸åã |
| | | > 5. åæ´å°¾å·®ãææ¬åæ°ååªå¨æ±æ»é计æ°ï¼ä¸è¿ãå®è´¨æ°å¼å·®å¼ãæ¸
åã |
| | | > |
| | | > **ä»éå¤ç/æ ¸å¯¹** |
| | | > - `ç线å
车` 3 æ ¼ï¼`EO36`/`FN36`/`FO36`ï¼èé¨ å®¢è¿é 2020 累计/ç´¯è®¡åæ¯ï¼ââ**ç¨åºçææ¶éç®ä¸º -2731.41 / -1.0008 / -1.0002**ï¼æ¯ç䏿工å®ç¨¿å为 0.181777 / 2312.2199 / -0.586419ï¼çæ¯ç 2020 å¹´ååæ¯ä¸º 0ï¼éæ ¸å¯¹å
¬å¼ä¸æ°æ®ã |
| | | > - ` è´§è¿` 10 æ¡ 2022 å¹´åå¸å·ãç´¯è®¡åæ¯ãï¼ä¸å¡å·²ç¡®è®¤**软件å£å¾æ£ç¡®**ï¼æå·¥é£åéï¼ã |
| | | > - æå·¥ä¾§å¾
æ¹ï¼304 æ ¼è稿åã286 æ ¼ææ¬åæ°åã4 å¤èæ°æ®ï¼`ç线å
车!IL4/IL5` æé¾ã`IL50` åå¼å·ã` è´§è¿!EA93/EA111` ç `#DIV/0!`ï¼ã |
| | | > - æ¯ç/ç¨åºèªèº«ï¼11 个 `#REF!` + 356 个 `#DIV/0!`ï¼åå²éçï¼ã`åå¸å®¢è¿` 第 2 è¡ç¬¬ 3 个æèµ·è¡¨å¤´ä¸ºæ¥æåºåå·ã缺 2026-09 æ¯çã导åºååºæ°ä½æ£æªåã |
| | | |
| | | """ |
| | | |
| | | 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 = [] |
| | |
| | | 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 |
| | |
| | | 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: |
| | |
| | | cat = "é误å¼(ç¨åº)"; note = vg |
| | | elif isinstance(vd, str) and vd.startswith("#"): |
| | | cat = "é误å¼(æå·¥)"; note = vd |
| | | elif (num(vg) and isinstance(vd, str)) or (num(vd) and isinstance(vg, str)): |
| | | cat = "éå¤ç(鿰弿æ¬)"; note = "ç¨åº=%s æå·¥=%s" % (str(vg)[:14], str(vd)[:14]) |
| | | else: |
| | | cat = "å
¶å®"; note = "ç¨åº=%s æå·¥=%s" % (str(vg)[:14], str(vd)[:14]) |
| | | if cat: |
| | |
| | | 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") |
| | |
| | | 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))) |