Python 操作 Word 文档入门与实战指南
本文主要讲解在 Windows 环境下使用 Python 操作 Microsoft Word 文档的思路、核心对象模型及实际应用场景。通过 win32com 库,我们可以直接调用 Word 的 COM 接口,实现自动化办公任务。
本文详细介绍了使用 Python 通过 win32com 库操作 Microsoft Word 文档的方法。内容涵盖环境搭建、核心对象模型(Application、Document、Selection、Range、Font 等)的解析、开发调试技巧以及完整的公文格式化实战案例。文章重点讲解了如何通过 COM 接口实现文档创建、文本输入、样式设置、页面布局调整及页码管理,并提供了异常处理和资源释放的最佳实践,旨在帮助开发者利用 Python 实现高效的 Office 自动化办公任务。

本文主要讲解在 Windows 环境下使用 Python 操作 Microsoft Word 文档的思路、核心对象模型及实际应用场景。通过 win32com 库,我们可以直接调用 Word 的 COM 接口,实现自动化办公任务。
使用 win32com 需要安装 pywin32 模块。
pip install pywin32
推荐使用 Python 的 IDLE 或 VS Code 进行交互开发,方便调试和实时查看效果。
在使用任何功能前,首先需要启动 Word 应用程序实例。
from win32com.client import Dispatch
# 创建 Word 应用程序对象
app = Dispatch('Word.Application')
# 默认情况下 Word 是隐藏的,设置为可见以便观察
app.Visible = True
运行上述代码后,会弹出一个空白的 Word 窗口。如果不需要看到界面(例如后台批量处理),可以将 app.Visible 设置为 False。
Word 的对象模型基于 COM 架构,理解其层级关系是编写脚本的关键。
代表整个 Word 进程,包含菜单栏、工具栏、所有打开的文档等全局资源。
app = win32com.client.Dispatch('Word.Application')
代表一个具体的 .docx 或 .doc 文件。一个 Application 可以包含多个 Document。
# 新建文档
doc = app.Documents.Add()
# 打开已有文档
doc = app.Documents.Open(r'C:\Users\Name\Desktop\test.docx')
Selection 代表当前窗口的活动选区。它可以是高亮区域,也可以是插入点光标。同一时间只能有一个 Selection。
s = app.Selection# Text 属性:替换选区内容
s.Text = 'Hello, World!'
# TypeText 方法:在光标后追加文本
s.TypeText('Hello, World!')
# 选中整篇文档
s.WholeStory()
# 向左移动 1 个字符
s.MoveLeft(1)
# 删除选区内容
s.Delete()
Range 表示文档中的一个连续字符范围,独立于 Selection 存在。即使 Selection 改变,Range 依然保持定义的范围。
r = doc.Range() # 整个文档
r = s.Range() # 当前选区对应的 Range
r = doc.Range(0, 10) # 指定索引范围
用于控制文本的字体名称、大小、颜色、加粗等属性。
font = s.Font
font.Name = '仿宋' # 中文字体
font.Size = 16 # 字号(磅)
font.Bold = True # 加粗
font.Color = 0x0000FF # 蓝色 (RGB 值需转换)
控制对齐方式、缩进、行距、边框底纹等。
pf = s.ParagraphFormat
pf.Alignment = 0 # 0:左对齐,1:居中,2:右对齐
pf.LineSpacingRule = 0 # 0:单倍行距,1:1.5 倍,2:双倍
pf.LeftIndent = 21 # 左缩进(磅)
管理页边距、纸张大小、页眉页脚距离等。
ps = doc.PageSetup
ps.TopMargin = 79 # 上边距(磅)
ps.BottomMargin = 79 # 下边距(磅)
ps.PageSize = 7 # 7: A4 纸
包含文档中内置和用户定义的所有样式(如正文、标题 1 等)。
styles = doc.Styles
normal = styles(-1) # -1 通常代表'正文'样式
normal.Font.Name = '仿宋'
normal.Font.Size = 16
由于 Word 功能繁多,直接在代码中查找 API 较为困难,建议采用以下策略:
Alt + F11 打开宏编辑器,按 F2 打开对象浏览器,搜索相关类名(如 Selection, Font)查看详细属性和方法。本示例演示如何按照最新的国家公文格式标准,对 Word 文档进行页面设置、字体设置及页码排版。
from win32com.client import Dispatch
import sys
try:
# 启动 Word
app = Dispatch('Word.Application')
app.Visible = False # 后台运行
# 打开文档
doc_path = r'C:\Users\Name\Desktop\input.docx'
doc = app.Documents.Open(doc_path)
# --- 1. 页面设置 ---
cm_to_points = 28.35 # 1 厘米约等于 28.35 磅
# 版心设置(根据公文标准调整)
doc.PageSetup.TopMargin = 3.3 * cm_to_points
doc.PageSetup.BottomMargin = 3.3 * cm_to_points
doc.PageSetup.LeftMargin = 2.8 * cm_to_points
doc.PageSetup.RightMargin = 2.6 * cm_to_points
# 网格设置(每行 28 字,每页 22 行)
doc.PageSetup.LayoutMode = 1 # wdLayoutModeLineGrid
doc.PageSetup.CharsLine = 28
doc.PageSetup.LinesPage = 22
# --- 2. 字体样式设置 ---
# 设置'正文'样式为仿宋三号
normal_style = doc.Styles(-1)
normal_style.Font.Name = '仿宋'
normal_style.Font.NameFarEast = '仿宋'
normal_style.Font.NameAscii = '仿宋'
normal_style.Font.Size = 16
# --- 3. 页码设置 ---
w = doc.Windows(1)
w.View.SeekView = 4 # wdSeekCurrentPageHeader (进入页眉页脚视图)
s = w.Selection
s.WholeStory() # 选中所有页眉页脚
s.Delete() # 清除原有页码
# 添加新页码
s.HeaderFooters.Add(4) # wdHeaderFooterPrimary
s.MoveRight(1, 2) # 移动到右侧
s.TypeText('— ') # 添加一字线
s.InsertAfter(' ') # 空格
# 设置页码格式
s.HeaderFooters(1).PageNumbers.StartingNumber = 1
s.HeaderFooters(1).PageNumbers.NumberStyle = 0 # 阿拉伯数字
# 页码字体设置(四号宋体)
s.Font.Name = '宋体'
s.Font.Size = 14
# 退出页眉页脚视图
w.View.SeekView = 0
# --- 4. 保存与关闭 ---
output_path = r'C:\Users\Name\Desktop\output.docx'
doc.SaveAs(output_path)
doc.Close(False)
app.Quit()
print(f"处理完成,文件已保存至:{output_path}")
except Exception as e:
print(f"发生错误:{str(e)}")
if 'app' in locals():
try:
app.Quit()
except:
pass
try...except 包裹关键逻辑,确保即使出错也能关闭 Word 进程,避免残留后台进程。 需要使用双反斜杠 \\ 或原始字符串 r'' 转义。app.Visible 设为 False,并在循环结束后统一调用 app.Quit()。python-docx 库,它不依赖本地安装的 Word,跨平台兼容性更好,但无法完全模拟 Word 的视觉效果。通过 win32com 操作 Word 文档,能够充分利用 Word 原生强大的排版能力,适合处理复杂的公文、报告生成任务。掌握 Application、Document、Selection、Range 等核心对象及其相互关系,配合宏录制和对象浏览器,即可高效解决各类自动化办公需求。在实际开发中,注意资源释放和异常处理,是保证脚本稳定运行的关键。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online