赞
踩
此示例为修改XXX-XXX-XXX-XXX最后三位的编号,当文档从上到下遍历时,每遇到一个标题,编号重新置为001
具体以实际情况修改。
- import os
- import docx
- from docx.oxml.table import CT_Tbl
- from docx.oxml.text.paragraph import CT_P
- # from docx.shared import Pt
- def load_word(file_path):
- doc = docx.Document(file_path)
- n = 0
- """遍历该word中的所有元素内容,返回的是两种element格式对象,如
- <CT_P '<w:p>' at 0x1b6a2e4a660>、
- <CT_Tbl '<w:tbl>' at 0x1b6a35064d0>"""
- print(doc.tables[0])
- print(doc.tables[0]._element)
- for block in doc.element.body.iterchildren():
- # 判断该对象是否为CT_P
- if isinstance(block, CT_P):
- # print(block)
- for paragraph in doc.paragraphs:
- # 判断段落的的element是否与从上到下遍历到的元素相同
- if paragraph._element == block:
- # 判断段落是否为目录标题形式
- if paragraph.style.name.startswith('Heading'):
- n = 0
- # 判断该对象是否为CT_Tbl
- elif isinstance(block, CT_Tbl):
- # 准备需要替换的number
- nums = []
- for i in range(1, 1000):
- nums.append('{:03d}'.format(i))
- # 遍历该文档中的所有表格
- for table in doc.tables:
- # 判断表的element是否与从上到下遍历到的元素相同
- if table._element == block:
- # 判断每个表的第一行第一列是否是XXX编号作为定位,也可用其他方式,因为可能有其他形式的表格
- if table.cell(0, 0).text == "XX编号": # 根据表格格式决定
- text = table.cell(0, 1).text # 获取编号text
- idx = text.rfind("-") # 查找倒数第一个"-"的索引
- for paragraph in table.cell(0, 1).paragraphs: # **直接替换文字不修改样式
- for run in paragraph.runs:
- run.text = run.text.replace(text[idx+1:], nums[n]) # 转化为字符串,部分替换
- """
- 直接修改text会修改单元格格式,需要重新定义单元格的样式
- table.cell(0, 1).text = text.replace(text[idx+1:], a)
- cell = table.cell(0, 1)
- cell.paragraphs[0].runs[0].font.name = '等线'
- cell.paragraphs[0].runs[0].font.size = docx.shared.Pt(10.5)
- cell.paragraphs[0].alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.LEFT
- cell.width = docx.shared.Inches(2.0)
- """
- print(nums[n])
- print(text)
-
- n += 1
- doc.save("new.docx")
- print("完成")
-
- if __name__ == '__main__':
- ROOT_DIR_P = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) # 项目根目录
- file_path = os.path.join(ROOT_DIR_P, "<项目的相对路径如:xx\\file\\xx汇总>") # 文件路径及文件名
- load_word(file_path)
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。