Python-docx库使用指南:从文档创建到样式设置的完整教程
本文详细介绍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样式管理器中找到!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













