Python 实现批量生成 Word 文档:市民水电费缴费通知单

用 Python 根据已有 Word 模板文件与需求自动生成多个文档

        • 前言:
          • 需求描述:
        • 主要思路及代码:
          • 读取Word模板数据:
          • 将上诉代码写成函数:
          • 读取Excel文件数据:
          • 替换及新建Word文档:
        • 全部代码:
        • 结尾:
    • 【Python与Office】专栏

前言:

在日常办公中操作 Word 文档时,经常会对已经有的Word文档的内容进行修改,比较少会直接新建一个空白的 Word 文档,再往里面写东西。

这篇博客也是介绍一个根据已有的 Word 文档,按照特定需求生成多个Word文档的实例。

需求描述:

假定某市行政中心需要对管辖范围内的用水电气居民用户发送缴费通知单,通知单如下图:

Python 实现批量生成 Word 文档:市民水电费缴费通知单_第1张图片
用水电气数据已经统计在一个 Excel 文件中,Excel 表格数据如下:

Python 实现批量生成 Word 文档:市民水电费缴费通知单_第2张图片
上表有25条用户数据,就是要根据这些数据创建25个Word文档,手动更改Word 文档似乎也可以。但是实际情况不可能只有25条数据,很可能是几千条数据,要手动创建更改Word文档就很麻烦了。而面对这种重复性强,逻辑简单的办公需要,用 Python 来提高效率简直完美。

具体需求:

读取 Excel 文件数据,根据数据内容与Word模板,新建对应数据条数的缴费通知单,将新建通知单以用户名命令,并保存在一个文件夹中。

主要思路及代码:
读取Word模板数据:

分析:
从需求上来看,核心功能就是要: 读取模板文件,在不改变模板文件中段落、文字格式的前提下,根据数据内容替换部分文字。

根据需要,调整的 Word 模板文件截图:

Python 实现批量生成 Word 文档:市民水电费缴费通知单_第3张图片

从前面几篇博客的介绍,可知Word文档中文字信息及格式都是保存在 run 对象中的。

所以先获取 Word 模板中正文段落所有的 run 对象:

import docx

# 读取 word 模板文件
template_word = docx.Document('test01.docx')  # 获取docx对象

# word 模板正文段落、表格所有 run 对象列表
template_runs = []

# 获取正文所有段落对象列表
pars = template_word.paragraphs
print(pars)
print(len(pars))  # 8

# 遍历段落对象列表,获得每一个段落对象
for par in pars:
    # 遍历段落对象的 run 对象列表,获得每一个run对象
    for run in par.runs:
        # 测试(看一下 run 内字符串是否与预期一致!!!)
        print(run.text)
        template_runs.append(run)

你可能感兴趣的:(Python与Office,python,excel,word,自动化办公,批量生成多个word)