| 1234567891011121314151617181920212223242526272829303132333435 |
- # -*- coding: utf-8 -*-
- # 临时校验脚本:检查参考表样式索引覆盖 + 校验导出的xlsx
- import zipfile, re, os, sys, json
- rp = os.path.join(os.path.expanduser("~"), "Desktop", "6.18号欧阳路预估报价.xlsx")
- z = zipfile.ZipFile(rp)
- s = z.read("xl/styles.xml").decode("utf-8")
- m = re.search(r'<cellXfs count="(\d+)">', s)
- print("ref cellXfs count:", m.group(1) if m else "N/A")
- print("ref has theme1:", "xl/theme/theme1.xml" in z.namelist())
- print("ref names:", z.namelist())
- # 若提供了导出文件路径,则校验其结构
- if len(sys.argv) > 1:
- p = sys.argv[1]
- zz = zipfile.ZipFile(p)
- bad = zz.testzip()
- print("zip testzip:", "OK" if bad is None else ("BAD:" + str(bad)))
- print("entries:", zz.namelist())
- import xml.dom.minidom as md
- for name in zz.namelist():
- data = zz.read(name)
- try:
- md.parseString(data)
- print("xml ok:", name, len(data), "bytes")
- except Exception as e:
- print("XML FAIL:", name, e)
- sheet = zz.read("xl/worksheets/sheet1.xml").decode("utf-8")
- rows = len(re.findall(r'<row ', sheet))
- merges = len(re.findall(r'<mergeCell ', sheet))
- maxs = [int(x) for x in re.findall(r'<c r="[A-Z]+\d+" s="(\d+)"', sheet)]
- print("sheet rows:", rows, "merges:", merges, "max style idx:", max(maxs) if maxs else 0)
- st = zz.read("xl/styles.xml").decode("utf-8")
- mm = re.search(r'<cellXfs count="(\d+)">', st)
- print("exported cellXfs count:", mm.group(1) if mm else "N/A")
|