_xchk.py 1.5 KB

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