王旭阳个人博客

wxy

使用Python处理Word文档:深入了解python-docx库

2023-11-24

欢迎来到本篇关于 Python-Docx 库的使用指南!在现代编程中,处理和生成Word文档是一项常见的任务。本文将引导你深入了解 python-docx 库,这是一个功能强大的Python库,用于简化处理Word文档的复杂性。

为什么需要处理Word文档?

在现实世界的编程任务中,我们经常需要自动生成报告、处理模板、或者与Word文档进行交互。处理Word文档能够提高生产力,减少手动工作,让我们的代码更加智能化。

Python-Docx简介

python-docx 是一个用于创建和修改Word文档的Python库。它提供了直观的API,使得操作文本、表格、样式等变得简单易懂。不管是初学者还是有经验的Python开发者,都可以从这个库中受益。

Github: https://github.com/python-openxml/python-docx

文档: https://python-docx.readthedocs.io/en/latest/index.html

你将学到什么?

本文将深入介绍 python-docx 库的各种功能,包括文本处理、表格操作、样式设置等。我们会通过实际的示例和代码演示,让你更好地理解如何在你的项目中应用这些知识。

让我们一起开始这个关于Python-Docx的旅程吧!

安装 python-docx

在开始之前,首先确保你已经安装了 python-docx。你可以使用以下命令进行安装:

pip install python-docx

创建新的 Word 文档

首先,我们将学习如何创建一个简单的Word文档。

from docx import Document

# 创建一个新文档
doc = Document()

# 添加标题
doc.add_heading('我的 Python-Docx 文档', 0)

# 添加段落
doc.add_paragraph('这是一个由 Python 生成的 Word 文档。')

# 保存文档
doc.save('my_first_document.docx')

在这个示例中,我们创建了一个新文档,添加了一个标题和一个段落,并将其保存为 my_first_document.docx

修改现有的 Word 文档

接下来,我们将看看如何打开现有文档并进行修改。

需要注意它主要支持的是 Office Open XML 格式的 Word 文档(.docx)。如果你手头的文档是旧的二进制格式(.doc),可以考虑先将其另存为 .docx 格式,然后再进行处理。

from docx import Document

# 打开一个已有的文档
doc = Document('existing_document.docx')

# 修改文档内容
for paragraph in doc.paragraphs:
    if '旧文本' in paragraph.text:
        paragraph.text = paragraph.text.replace('旧文本', '新文本')

# 添加新段落
doc.add_paragraph('这是新添加的段落。')

# 保存修改后的文档
doc.save('modified_document.docx')

这个示例展示了如何打开一个现有的文档,查找并替换文本,以及添加新的段落。

添加表格

Python-Docx 还允许你在文档中添加表格。

from docx import Document

# 创建一个新文档
doc = Document()

# 添加表格
table = doc.add_table(rows=3, cols=3)
for i in range(3):
    for j in range(3):
        table.cell(i, j).text = f'行 {i + 1}, 列 {j + 1}'

# 保存文档
doc.save('document_with_table.docx')

在这个示例中,我们创建了一个包含3行3列的表格,并将其保存为 document_with_table.docx

处理样式

1. 文字样式

通过 Python-docx,你可以轻松设置文本的字体:


doc = Document()
paragraph = doc.add_paragraph("这是一段文本。")

run = paragraph.add_run("这是加粗的文本。")
run.bold = True
run.italic = True

# 设置字体
font = run.font
# 设置西文字体
font.name = u"宋体"
# 设置中文字体
run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
font.size = Pt(12)

run = paragraph.add_run("这是一段有颜色的文本。")
font = run.font
font.color.rgb = (255, 0, 0)  # 红色

2. 段落样式

# 通过设置段落的对齐方式
# LEFT      =>  左对齐
# CENTER    =>  文字居中
# RIGHT     =>  右对齐
# JUSTIFY   =>  文本两端对齐
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# 设置段落的行距为1.5倍
paragraph.line_spacing = 1.5

# 设置段落缩进,可为负值,如下:
paragraph.paragraph_format.first_line_indent = Inches(-0.25)
# 首行缩进0.74厘米,即2个字符
# paragraph.paragraph_format.first_line_indent = Cm(0.74)

3 修改样式,新增样式

查看所有样式名称

    document = Document()

    # 获取所有样式。
    allStyle = document.styles
    # 打印样式名称。
    for style in allStyle:
        print(style.name)

修改样式

# 获取正文样式 并修改
normal_style = document.styles["Normal"]
normal_style.font.name = u"宋体"  # 设置全局字体
normal_style._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
normal_style.font.color.rgb = RGBColor(255, 0, 0)  # 设置正文全局颜色为红色
normal_style.font.size = Pt(14)
# 设置首行缩进, 缩进0.74厘米,即2个字符
paragraph_format = normal_style.paragraph_format.first_line_indent = Cm(0.74)

新增样式

# 新增样式(第一个参数是样式名称,第二个参数是样式类型:1代表段落;2代表字符;3代表表格)
myStylePython = document.styles.add_style('my-style-python', 1)
# 设置西文字体
myStylePython.font.name = u"宋体"
# 设置中文字体
myStylePython.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')

paragraph = document.add_paragraph(
    "DOCX 文档是我们常用的文档格式, 作为一种重要的文字来源与输出格式,日常工作中会大量处理Docx格式的文档。 "
    "需要解析并处理几百个数量级的文件,手动的编写以及不能够满足项目需求, 与之对应的python库应运而生, 不用再手工编写,减少了许多重复性工作。")
# 首行缩进0.74厘米,即2个字符
paragraph.paragraph_format.first_line_indent = Cm(0.74)
paragraph.style = myStylePython

添加换页

# 添加换页
# 如果一个段落不满一页,需要分页时,可以插入一个分页符,直接调用会将分页符插入到最后一个段落之后:
paragraph.runs[-1].add_break(WD_BREAK.PAGE)

样式相关完整代码