Python-docx库使用指南:从文档创建到样式设置的完整教程

晚来风
晚来风
发布时间:2026-10-14| 2人浏览过
原创

本文详细介绍Python-docx库在Word文档自动化处理中的应用。涵盖安装配置、文档创建与打开、段落与标题管理、表格构建与迭代、图片插入及大小调整、以及字体和段落样式的精细控制。通过具体代码示例,帮助开发者高效实现批量文档生成与编辑任务。

Python-docx库简介与安装

此前曾介绍过用于处理Excel的openpyxl库,而在处理Word文档时,同样存在对应的Python库Python-docx。在日常办公场景中,若需处理大量Word文件且操作步骤重复单调,该库将提供极大便利。

在掌握Python-docx常用函数前,需明确其命令与Word文档各组件的对应关系,如图所示:

  • Document代表整个Word文档对象;
  • paragraph对应文档中的段落;
  • run对应段落中具有独立样式的文本片段,样式调整通常以run为操作单位;

1. 安装Python-docx

使用pip工具即可安装,在命令行执行pip install Python-docx命令完成安装。

文档创建与打开

2. 创建或打开Document对象

导入Python-docx库时,模块名为docx,这与OpenCV的导入方式类似。创建新文件或打开现有文件均通过Document()函数实现,操作时需注意以下几点:

1. 调用Document()函数会基于默认模板创建一个空白文档,随后可进行编辑。若未调用save()函数保存,文档将随程序结束而丢失;

2. 调用Document(path)函数用于打开本地已存在的docx文件,path为文件路径,若路径不存在程序将报错。

from docx import Document

document = Document()

段落与标题管理

3. 添加段落

段落是Word文档正文的主要组成部分。在已创建的Document对象中添加段落,官方提供了两种方法:

1. 在文档末尾插入

这是最常见且简单的方法,命令如下:

paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')

该方法将新建的段落引用指向paragraph变量,明确了光标位置,后续操作可借助该变量进行定位。

2. 在指定位置前插入

文档编辑通常按顺序在末尾进行,但有时可能因失误漏输内容,此时需在指定位置前插入段落。

prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')

此命令常用于文档修正,当需要在某段文字前添加其他内容时使用。

4. 标题设置

Word文档使用一、二、三级标题划分正文部分,增强文本层次感。Python-docx提供了内置函数来创建标题,分为主标题和子标题。

创建标题的函数包含一个level参数,若不设置则默认为主标题(level = 0);

document.add_heading('The REAL meaning of the universe')

子标题分为1至9级,通过修改level参数即可实现。

document.add_heading('The role of dolphins', level=2)

分页符与表格操作

5. 分页符

在Word编辑中,若需在单独新页面编写文本,需插入强制分页符,命令如下:

document.add_page_break()

注意,插入分页符后,新页面上段落的样式属性与之前页面是分离的。

6. 表格操作

在文档中创建一个2行2列的表格。

table = document.add_table(rows=2, cols=2)

表格中的每个单元格均可进行文本编辑和颜色填充。对于特定表格,可通过row和column索引定位,这里借鉴了操作Excel表格的思路。

cell = table.cell(0, 1)

为单元格赋值文本内容。

cell.text = 'parrot, possibly dead'

逐个修改单元格较为繁琐,可一次选中指定列,对单元格数据进行批量修改。

row = table.rows[1] row.cells[0].text = 'Foo bar to you.' row.cells[1].text = 'And a hearty foo bar to you too sir!'

table.rows[index]返回指定索引的行。由于.rows和.cols表示表格的全部行或列是可迭代的,因此可通过for循环访问每个单元格。

for row in table.rows: for cell in row.cells: print(cell.text)

由于.rows和.cols是可迭代的,可通过len()命令获取行数和列数。

row_count = len(table.rows) col_count = len(table.columns)

除上述操作外,还可向table中动态添加行和列。

row = table.add_row() col = table.add_col()

结合前文提到的创建表格、修改单元格、添加行列及迭代操作,以下实例进行简单总结,代码实现功能如下:

  • 1. 定义item为包含3个元素的元组数据;
  • 2. 在Word中新建一个表格,包含一行三列;
  • 3. 将新建表格的表头依次设置为Qty、SKU、Description;
  • 4. 将item中的元素以表格逐行3列的方式填充;

# get table data -------------
items = (
  (7, '1024', 'Plush kittens'),
  (3, '2042', 'Furbees'),
  (1, '1288', 'French Poodle Collars, Deluxe'),
)

# add table ------------------
table = document.add_table(1, 3)

# populate header row --------
heading_cells = table.rows[0].cells
heading_cells[0].text = 'Qty'
heading_cells[1].text = 'SKU'
heading_cells[2].text = 'Description'

# add a data row for each item
for item in items:
  cells = table.add_row().cells
  cells[0].text = str(item.qty)
  cells[1].text = item.sku
  cells[2].text = item.desc

此外,还可修改表格样式。Word文档中的表格样式均可在此设定(样式名称可通过Word文档自带的样式查看,将鼠标悬停在样式缩略图上即可看到)。需注意,使用样式时需去掉Word软件中样式名里的空格,例如Office原样式名为Light Shading-Accent1,此处直接去掉中间空格。

table.style = 'LightShading-Accent1'

图片插入与大小调整

7. 插入图片

在python-docx中添加图片可使用以下命令完成:

document.add_picture('image-filename.png')

上述示例添加的是本地文件path,此外还可使用file-like object格式,这种格式对于读取数据库或网络图片非常便捷。

修改图片大小

python-docx添加图像时默认使用native size,正常图片插入时一侧会出现约4.167英寸的空白区域,约占纸张宽度的一半。在获取期望图像大小时,可指定宽度或高度为更便捷的单位。

from docx.shared import Inches

document.add_picture('image-filename.png', width=Inches(1.0))

段落与字符样式设置

8. 应用段落样式

设定段落样式有两种方法,一种是在创建时直接设置。

document.add_paragraph('Lorem ipsum dolor sit amet.', style='ListBullet')

另一种是创建后再进行设置(此时无需去掉样式名称中的空格)。

paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.') paragraph.style = 'List Bullet'

9. 字体加粗与斜体化

对字体进行斜体和加粗操作前,需理解段落内部的结构,简单来说分为两部分:

1. 段落具有全部block-level formatting,如制表符、行高、tabs等;

2. Character-level formatting,例如粗体、斜体,应用于run对象。段落中的所有内容必须是一个run,且不仅包含一个。Run对象同时包含.bold和.italic属性,可对其值进行设置。

paragraph = document.add_paragraph('Lorem ipsum ') run = paragraph.add_run('dolor') run.bold = True paragraph.add_run(' sit amet.')

上述代码中最后创建的文本格式形如:Lorem ipsum dolor sit amet.(其中dolor为粗体)。

需注意,设置bold或italic时,可直接将.add_run()命令放在右侧。

paragraph.add_run('dolor').bold = True

# 等价于:

run = paragraph.add_run('dolor') run.bold = True

# 区别在于后续无法直接引用run变量

10. 字符样式

除加粗、斜体外,还可定义字符样式(character styles),定义时加入一行新的run对象;例如:

paragraph = document.add_paragraph('Normal text, ') paragraph.add_run('text with emphasis.', 'Emphasis')

上述代码创建了一个文本,结果如下:

Normal text,text with emphasis.;其中text with emphasis.部分应用了Emphasis(强调)的字符格式。

上述代码也可改写为:

paragraph = document.add_paragraph('Normal text, ') run = paragraph.add_run('text with emphasis.') run.style = 'Emphasis'

与段落样式相同,样式名称与Word UI中的一致,可在Word样式管理器中找到!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。