当前位置:   article > 正文

python 办公自动化之 word中的表格编号批量修改_python 修改 word 序号

python 修改 word 序号
在word中插入表格进行的编号时,有时会遇到编号太多,容易写错的问题,因此加上了自动化修改编号的部分

此示例为修改XXX-XXX-XXX-XXX最后三位的编号,当文档从上到下遍历时,每遇到一个标题,编号重新置为001

具体以实际情况修改。

  1. import os
  2. import docx
  3. from docx.oxml.table import CT_Tbl
  4. from docx.oxml.text.paragraph import CT_P
  5. # from docx.shared import Pt
  6. def load_word(file_path):
  7. doc = docx.Document(file_path)
  8. n = 0
  9. """遍历该word中的所有元素内容,返回的是两种element格式对象,如
  10. <CT_P '<w:p>' at 0x1b6a2e4a660>、
  11. <CT_Tbl '<w:tbl>' at 0x1b6a35064d0>"""
  12. print(doc.tables[0])
  13. print(doc.tables[0]._element)
  14. for block in doc.element.body.iterchildren():
  15. # 判断该对象是否为CT_P
  16. if isinstance(block, CT_P):
  17. # print(block)
  18. for paragraph in doc.paragraphs:
  19. # 判断段落的的element是否与从上到下遍历到的元素相同
  20. if paragraph._element == block:
  21. # 判断段落是否为目录标题形式
  22. if paragraph.style.name.startswith('Heading'):
  23. n = 0
  24. # 判断该对象是否为CT_Tbl
  25. elif isinstance(block, CT_Tbl):
  26. # 准备需要替换的number
  27. nums = []
  28. for i in range(1, 1000):
  29. nums.append('{:03d}'.format(i))
  30. # 遍历该文档中的所有表格
  31. for table in doc.tables:
  32. # 判断表的element是否与从上到下遍历到的元素相同
  33. if table._element == block:
  34. # 判断每个表的第一行第一列是否是XXX编号作为定位,也可用其他方式,因为可能有其他形式的表格
  35. if table.cell(0, 0).text == "XX编号": # 根据表格格式决定
  36. text = table.cell(0, 1).text # 获取编号text
  37. idx = text.rfind("-") # 查找倒数第一个"-"的索引
  38. for paragraph in table.cell(0, 1).paragraphs: # **直接替换文字不修改样式
  39. for run in paragraph.runs:
  40. run.text = run.text.replace(text[idx+1:], nums[n]) # 转化为字符串,部分替换
  41. """
  42. 直接修改text会修改单元格格式,需要重新定义单元格的样式
  43. table.cell(0, 1).text = text.replace(text[idx+1:], a)
  44. cell = table.cell(0, 1)
  45. cell.paragraphs[0].runs[0].font.name = '等线'
  46. cell.paragraphs[0].runs[0].font.size = docx.shared.Pt(10.5)
  47. cell.paragraphs[0].alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.LEFT
  48. cell.width = docx.shared.Inches(2.0)
  49. """
  50. print(nums[n])
  51. print(text)
  52. n += 1
  53. doc.save("new.docx")
  54. print("完成")
  55. if __name__ == '__main__':
  56. ROOT_DIR_P = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) # 项目根目录
  57. file_path = os.path.join(ROOT_DIR_P, "<项目的相对路径如:xx\\file\\xx汇总>") # 文件路径及文件名
  58. load_word(file_path)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/795959
推荐阅读
相关标签
  

闽ICP备14008679号