Python自动填写Word文档

本文将介绍如何使用Python自动填写Word文档。我们将通过示例代码和详细解释来展示如何使用Python的第三方库python-docx来实现这一功能。

什么是python-docx库?

python-docx是一个用于创建和修改Microsoft Word文档的Python库。它允许我们使用Python代码来生成、编辑和格式化Word文档,以及将数据动态地插入到文档中。这个库提供了丰富的功能,使我们能够自动化处理Word文档,如自动填写表单、创建报告等。

安装python-docx库

在开始之前,我们需要先安装python-docx库。你可以使用pip来安装这个库,只需在终端中运行以下命令:

pip install python-docx

安装完成后,我们就可以在Python程序中导入并使用这个库了。

创建一个空白的Word文档

首先,我们需要创建一个空白的Word文档,以便填写数据。我们可以使用python-docx库的Document类来创建一个空白的文档。以下是示例代码:

from docx import Document

document = Document()
document.save('empty.docx')

在这个示例中,我们导入了Document类并创建了一个名为document的对象。然后,我们使用save方法将空白文档保存为empty.docx

添加内容到Word文档

接下来,我们将向文档中添加内容。我们可以使用Document类的各种方法来添加段落、标题、表格、图像等元素。以下是一个示例,演示了如何添加段落和标题:

from docx import Document

document = Document()
document.add_heading('自动填写Word文档', level=1)
document.add_paragraph('这是一个示例段落,用于演示如何添加内容到Word文档。')

document.save('filled.docx')

在这个示例中,我们使用add_heading方法添加了一个一级标题,使用add_paragraph方法添加了一个段落。最后,我们使用save方法将填充好内容的文档保存为filled.docx

填写表格数据

除了添加段落和标题,我们还可以使用python-docx库来填写表格数据。以下是一个示例代码,演示了如何在表格中添加数据:

from docx import Document

document = Document()
table = document.add_table(rows=3, cols=3)

# 填写表头
header_cells = table.rows[0].cells
header_cells[0].text = '姓名'
header_cells[1].text = '年龄'
header_cells[2].text = '性别'

# 填写数据
data = [
    ['张三', '25', '男'],
    ['李四', '30', '女'],
    ['王五', '28', '男']
]

for i, row in enumerate(table.rows[1:]):
    for j, cell in enumerate(row.cells):
        cell.text = data[i][j]

document.save('table.docx')

在这个示例中,我们首先使用add_table方法创建了一个3x3大小的表格。然后,我们使用table.rowstable.cells属性来访问表格的行和单元格。通过为单元格的text属性赋值,我们可以填写表格中的数据。最后,我们使用save方法将带表格数据的文档保存为table.docx

使用模板填充数据

除了使用代码动态地填写数据外,我们还可以使用模板将数据插入到Word文档中。模板是一个包含占位符的Word文档,我们可以在需要插入数据的地方使用特定的标记。以下是一个示例代码,演示了如何使用模板填充数据:

from docx import Document
from docx.shared import Pt

def fill_template(template_path, output_path, data):
    document = Document(template_path)

    for placeholder, value in data.items():
        for paragraph in document.paragraphs:
            if placeholder in paragraph.text:
                run = paragraph.runs[0]
                run.text = run.text.replace(placeholder, str(value))