Python操作Word文档神器:python-docx库从入门到精通

Python操作Word文档神器:python-docx库从入门到精通


动动小手,点击关注,感谢您的阅读,您的关注是我最大的动力!!!!


在办公自动化场景中,处理 Word 文档是常见需求。python-docx库让你无需手动操作,即可通过 Python 代码轻松创建、修改和解析 Word 文档(.docx 格式)。本文将带你掌握其核心功能,并通过实用案例提升你的办公效率!

一、基础操作:创建与打开文档

1. 创建新文档

核心函数

  • Document():创建一个空白的 Word 文档对象。
  • add_heading(text,level=1):添加标题。level从0到9,默认为1;0为文章标题,大于1的为小标题。
  • add_paragraph(text):添加段落。
  • save(path):保存文档。生成的文件为.docx 格式,而非 .doc。

案例:创建简单的文档

from docx import Document

# 创建文档对象
doc = Document()

# 添加标题(级别1)
doc.add_heading('欢迎使用Python生成文档', level=1)

# 添加段落
doc.add_paragraph('这是使用python-docx库自动生成的文档。')
doc.add_paragraph('下面将展示更多功能...')

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

2. 打开并修改现有文档

核心函数

  • Document('path.docx'):打开现有文档。
  • 属性paragraphs:获取所有段落对象(不是段落的内容)到列表,可通过段落对象的text属性获取段落内容,并支持修改内容。

案例:在已有文档中添加内容

from docx import Document

# 打开现有文档
doc = Document('python-doc.docx')

# 添加新段落
doc.add_paragraph('新增内容:这是后续添加的段落。')

# 修改第一段内容
doc.paragraphs[0].text = '更新后的标题:Python办公自动化'

# 保存修改
doc.save('updated.docx')

闭坑指南

操作前确保文档未被其他程序(如 Word)打开,否则会抛出权限错误。

二、文本格式化:段落、字体与样式

1. 段落格式化

核心函数

  • add_paragraph(text):添加段落。
  • add_run(text):在段落中添加文本块(可单独设置格式)。
  • alignment:设置段落对齐方式(0 = 左对齐,1 = 居中,2 = 右对齐)。

可以引用from docx.enum.text import WD_PARAGRAPH_ALIGNMENT,对应属性值如下:

案例:创建带格式的段落

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

doc = Document()

# 添加居中对齐的标题
title = doc.add_heading(level=1)
title_run = title.add_run('居中标题')
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  #设置CENTER居中

# 添加带格式的段落
p = doc.add_paragraph()
p.add_run('加粗文本').bold = True #设置为加粗
p.add_run(' 普通文本 ')
p.add_run('斜体文本').italic = True   #设置为斜体

# 右对齐段落
p.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT  #设置RIGHT靠右

doc.save('formatted.docx')

2. 字体样式设置

核心函数

函数 / 属性

功能描述

font.name

设置字体名称(如:'宋体'、'微软雅黑'、'黑体'、'Arial')

font.size

设置字体大小(单位:磅,如:Pt(12))

font.bold

设置加粗(True/False)

font.italic

设置斜体(True/False)

font.underline

设置下划线(True/False 或线型样式)

font.color.rgb

设置字体颜色(如:RGBColor(255, 0, 0),初始化3个int值(0-255),分别代表红,绿,蓝)

font.strike

设置删除线(True/False)

font.subscript

设置下标(True/False)

font.superscript

设置上标(True/False)

1. 基础字体设置

from docx import Document
from docx.shared import Pt
from docx.shared import RGBColor

doc = Document()
p = doc.add_paragraph()

# 添加文本并设置字体
run = p.add_run('这是宋体,16磅,加粗,红色')
run.font.name = '宋体'
run.font.size = Pt(16)
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0)

# 添加另一段文本,设置不同字体
run = p.add_run(' 这是Arial,12磅,斜体,蓝色')
run.font.name = 'Arial'
run.font.size = Pt(12)
run.font.italic = True
run.font.color.rgb = RGBColor(0, 0, 255)

doc.save('font_example.docx')

2. 混合字体样式(上标、下标、下划线)

from docx import Document
from docx.shared import Pt

doc = Document()
p = doc.add_paragraph()

# 上标示例:X^2
p.add_run('X').font.size = Pt(12)
sup = p.add_run('2')
sup.font.superscript = True
sup.font.size = Pt(8)

p.add_run(' + ')

# 下标示例:HO
p.add_run('H').font.size = Pt(12)
sub = p.add_run('2')
sub.font.subscript = True
sub.font.size = Pt(8)
p.add_run('O')

# 下划线示例
p.add_run(' 这是下划线文本').font.underline = True

doc.save('font_special.docx')

3.批量设置多个 Run 的字体

from docx import Document
from docx.shared import Pt

def set_font(run, font_name, size, bold=False, italic=False):
    run.font.name = font_name
    run.font.size = Pt(size)
    run.font.bold = bold
    run.font.italic = italic
    return run

doc = Document()
p = doc.add_paragraph()

# 批量设置
set_font(p.add_run('标题1'), '黑体', 16, bold=True)
p.add_run('\n')  # 换行
set_font(p.add_run('正文内容...'), '宋体', 12)

doc.save('batch_font.docx')

4. 读取并修改现有文档的字体

from docx import Document
from docx.shared import Pt

doc = Document('existing.docx')

# 遍历所有段落和Run,修改字体
for p in doc.paragraphs:
    for run in p.runs:
        run.font.name = '宋体'
        run.font.size = Pt(12)

doc.save('modified_font.docx')

PS:

段落与 Run 的区别:段落(Paragraph)是文档的基本结构单位,而Run是段落内具有相同格式的文本块。若直接对段落设置字体,会影响整个段落:

p = doc.add_paragraph() p.style.font.name = '宋体' # 整个段落使用宋体

体颜色设置:使用RGBColor时,值范围为 0-255。常见颜色的 RGB值:

颜色名称

RGB 值(Red, Green, Blue)

黑色

(0, 0, 0)

白色

(255, 255, 255)

红色

(255, 0, 0)

绿色

(0, 255, 0)

蓝色

(0, 0, 255)

黄色

(255, 255, 0)

青色

(0, 255, 255)

品红色

(255, 0, 255)

灰色

(128, 128, 128)

橙色

(255, 165, 0)

紫色

(128, 0, 128)

字体大小单位:使用Pt()指定磅值,而非像素(如:Pt(12) 对应Word中的12号字体)。

三、表格与列表操作

1. 创建表格

核心函数

  • add_table(rows, cols):创建表格。
  • cell(row, col).text:设置单元格文本。
Document.add_table(rows, cols, style=None)

参数说明:rows:表格的行数(整数),cols:表格的列数(整数),style:表格样式(可选,如'Table Grid')

返回值:返回一个Table对象,可用于后续操作(如填充数据、设置格式)。

from docx import Document

doc = Document()

# 创建4行4列的表格
table = doc.add_table(rows=4, cols=4, style='Table Grid')

# 填充表头 table.rows[0]表示第1行,table.rows[0].cells表示第1行的列对象
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '姓名'  #填充第1列的内容
hdr_cells[1].text = '年龄'  #填充第2列的内容
hdr_cells[2].text = '性别'  #填充第3列的内容
hdr_cells[3].text = '职业'  #填充第4列的内容

# 填充数据
data = [
    ('张三', 25, '男', '工程师'),
    ('李四', 30, '女', '设计师'),
    ('王五', 28, '男', '产品经理')
]

for row_idx, row_data in enumerate(data, 1):
    row_cells = table.rows[row_idx].cells
    for col_idx, cell_data in enumerate(row_data):
        row_cells[col_idx].text = str(cell_data)

doc.save('simple_table.docx')

程序执行后,打开docx文档,表格如下:

1). 合并单元格

# 合并第1行的前两列
table.cell(0, 0).merge(table.cell(0, 1))
table.cell(0, 0).text = '个人信息'

2). 设置单元格格式

from docx.shared import RGBColor

# 设置字体颜色
cell = table.cell(1, 0)  # 第2行第1列
cell.paragraphs[0].runs[0].font.color.rgb = RGBColor(255, 0, 0)  # 红色文本
cell.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER         #居中
cell.paragraphs[0].runs[0].font.bold = True                      #加粗
 

3). 添加图片到表格

from docx.shared import Inches

# 在表格中插入图片
cell = table.cell(1, 3)  # 第2行第4列
cell.paragraphs[0].add_run().add_picture('photo.jpg', width=Inches(1.0))

以上几个场景,在主场景中增加后,执行结果如下:

2. 添加列表

核心函数

  • add_paragraph(text, style='List Bullet'):添加无序列表。
  • add_paragraph(text, style='List Number'):添加有序列表。

案例:创建购物清单

from docx import Document

doc = Document()
doc.add_heading('购物清单', level=2)

# 无序列表
doc.add_paragraph('水果', style='List Bullet')   #1级
doc.add_paragraph('苹果', style='List Bullet 2') #2级 
doc.add_paragraph('香蕉', style='List Bullet 2') #2级 

# 有序列表
doc.add_paragraph('步骤', style='List Number')
doc.add_paragraph('选择商品', style='List Number 2')
doc.add_paragraph('结账付款', style='List Number 2')

doc.save('shopping_list.docx')

四、高级操作:插入图片与页面设置

1. 插入图片

核心函数

  • add_picture(image_path, width, height):插入图片并设置尺寸。

案例:创建产品介绍文档

from docx import Document
from docx.shared import Inches

doc = Document()
doc.add_heading('产品介绍', level=1)

# 添加文本说明
doc.add_paragraph('这是我们的最新产品,具有以下特点:')

# 添加图片
doc.add_picture('product.jpg', width=Inches(4), height=Inches(3))

# 添加产品特性列表
features = ['高性能', '低功耗', '易操作', '长寿命']
for feature in features:
    doc.add_paragraph(feature, style='List Bullet')

doc.save('product_intro.docx')

2. 页面设置

核心函数

  • section.page_height:设置页面高度。
  • section.page_width:设置页面宽度。
  • section.orientation:设置页面方向(纵向 / 横向)。

案例:创建横向页面文档

from docx import Document
from docx.enum.section import WD_ORIENT

doc = Document()

# 获取第一个节(默认只有一个节)
section = doc.sections[0]

# 计算横向页面尺寸(交换宽高)
new_width, new_height = section.page_height, section.page_width
section.orientation = WD_ORIENT.LANDSCAPE
section.page_width = new_width
section.page_height = new_height

# 添加内容
doc.add_heading('横向页面示例', level=1)
doc.add_paragraph('这是一个横向页面的文档。')

doc.save('landscape_page.docx')

5、总结

python-docx 库为Word 文档自动化提供了强大支持,无论是简单的文本处理,还是复杂的表格、图片操作,都能轻松应对。通过本文的案例,你可以快速上手并应用到实际工作中,提升办公效率! 其他请参考官方文档:
https://python-docx.readthedocs.io/

相关文章

Python 操作 Word

用 docx 模块读取 Worddocx 安装cmd 中输入pip install python-docx 即可安装 docx 模块docx 常用函数创建空白文档from docx import Do...

Python+Word办公自动化:10分钟掌握高效文档处理,告别996加班!

引言在职场中,Word文档处理是高频却耗时的任务——批量生成报告、重复填写表格、手动调整格式……而Python的python-docx库,能让你用代码轻松实现文档自动化,效率提升10倍!本文将手把手教...

提升效率100倍,Python+Word实现周报自动化的完整流程

在现代企业环境中,周报、月报等定期报告的编写往往占用了大量专业人员的宝贵时间。这些报告通常需要从各种数据源中提取数据,进行分析整理,再按照统一的格式生成文档。如果能够将这一过程自动化,不仅可以大幅提高...

学点python,自动化生成word报告

●  ●  ●自动化处理Excel文件Pandas可是当之无愧的利器,那么有没有能自动化处理Word的神器呢?答案是有,本文将介绍如何使用python-docx库来处理Word文档,但是个人感觉它不能...