百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2025-07-07 22:16 51 浏览 0 评论

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/

相关推荐

阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?

TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...

高流量大并发Linux TCP性能调优_linux 高并发网络编程

其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...

性能测试100集(12)性能指标资源使用率

在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...

Linux 服务器常见的性能调优_linux高性能服务端编程

一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...

Nginx性能优化实战:手把手教你提升10倍性能!

关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...

高并发场景下,Spring Cloud Gateway如何抗住百万QPS?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...

Kubernetes 高并发处理实战(可落地案例 + 源码)

目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...

高并发场景下,Nginx如何扛住千万级请求?

Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...

Spring Boot+Vue全栈开发实战,中文版高清PDF资源

SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...

Docker-基础操作_docker基础实战教程二

一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...

你有空吗?跟我一起搭个服务器好不好?

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...

部署你自己的 SaaS_saas如何部署

部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...

Docker Compose_dockercompose安装

DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...

京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统

前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...

Kubernetes (k8s) 入门学习指南_k8s kubeproxy

Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...

取消回复欢迎 发表评论: