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

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

此示例为修改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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值