下面我将为你提供一个详细的指南,包括环境准备、代码示例以及一些常见操作。

核心概念
win32com: 一个 Python 库,用于创建和操作 Windows COM 对象。pywin32: 这是win32com所在的包的全称,安装时我们通常使用pip install pywin32。- COM (Component Object Model): 微软的软件组件技术,Python 通过 COM 可以“控制”像 Word、Excel、IE 这样的应用程序,就像你手动操作它们一样。
- Word 对象模型: Word 本身是由一系列对象组成的层次结构。
Application: 代表整个 Word 应用程序。Document: 代表一个 Word 文档。Range/Selection: 代表文档中的一个连续区域(文本、图片、表格等)。Paragraph: 代表一个段落。Table: 代表一个表格。
第一步:安装必要的库
你需要安装 pywin32 库,打开你的命令行(CMD 或 PowerShell)并运行:
pip install pywin32
重要提示:这个库只能在 Windows 操作系统 上运行,因为它依赖于 Windows 的 COM 组件。
第二步:基本读写操作
我们将从最简单的创建、写入、保存和读取一个 Word 文件开始。
示例 1:创建一个新 .docx 文件并写入内容
这个例子会创建一个新文档,写入几行文字,然后将其保存为 .docx 格式。

import win32com.client as win32
def create_and_write_docx():
# 1. 启动 Word 应用程序
# 创建一个 Word 应用程序对象
word = win32.Dispatch('Word.Application')
# 设置 Word 应用程序可见 (1=可见, 0=隐藏)
# 为了调试方便,建议先设置为可见
word.Visible = 1
# 2. 创建一个新的文档
doc = word.Documents.Add()
# 3. 在文档中写入内容
# 获取文档的内容对象
content = doc.Content
# 写入文本
content.Text = "这是通过 Python 写入的第一行标题,\n\n"
content.Text += "这是第二段正文内容,\n\n"
content.Text += "这是第三段,包含一些列表:\n"
content.Text += "- 列表项 1\n"
content.Text += "- 列表项 2\n"
content.Text += "- 列表项 3\n"
# 4. 保存文档
# 指定保存路径,使用 .docx 扩展名
file_path = r"C:\temp\my_new_document.docx" # 使用 r 前缀避免路径转义问题
# 确保目录存在
import os
os.makedirs(os.path.dirname(file_path), exist_ok=True)
doc.SaveAs(file_path)
print(f"文档已成功创建并保存到: {file_path}")
# 5. 关闭文档和 Word 应用程序
doc.Close()
word.Quit()
# --- 运行函数 ---
# create_and_write_docx()
示例 2:读取一个已存在的 .doc 或 .docx 文件
这个例子会打开一个现有的文档,读取其全部文本内容,并打印出来。
import win32com.client as win32
def read_existing_doc(file_path):
"""
读取 Word 文档的文本内容
:param file_path: Word 文档的完整路径
"""
try:
# 1. 启动 Word 应用程序
word = win32.Dispatch('Word.Application')
word.Visible = 0 # 设置为不可见,在后台运行
# 2. 打开指定的文档
# 注意:使用 Documents.Open() 方法
doc = word.Documents.Open(file_path)
# 3. 读取文档内容
# Range 对象可以指定读取的范围
# doc.Content 表示整个文档的内容
full_text = doc.Content.Text
print("---------- 文档内容开始 ----------")
print(full_text)
print("---------- 文档内容结束 ----------")
# 4. 关闭文档和 Word 应用程序
doc.Close()
word.Quit()
except Exception as e:
print(f"发生错误: {e}")
# 确保在出错时也关闭 Word
if 'word' in locals():
word.Quit()
# --- 运行函数 ---
# 假设你有一个名为 "example.doc" 的文件在 C 盘根目录
# read_existing_doc(r"C:\example.doc")
# read_existing_doc(r"C:\temp\my_new_document.docx") # 读取我们刚才创建的文件
第三步:进阶操作
掌握了基本读写后,我们可以进行更复杂的操作,如格式化、插入表格、图片等。
示例 3:格式化文本(加粗、斜体、设置标题)
import win32com.client as win32
def format_text_in_doc():
word = win32.Dispatch('Word.Application')
word.Visible = 1
doc = word.Documents.Add()
# 获取文档的 Range 对象
# Range(0, 0) 表示从文档开头开始的一个空范围,我们可以向其中添加内容
range_obj = doc.Range(0, 0)
# 添加标题
range_obj.Text = "这是一个一级标题"
# 应用标题1样式
range_obj.Style = doc.Styles('Heading 1')
range_obj.InsertAfter("\n\n") # 换行
# 添加加粗文本
range_obj.Text = "这是一段加粗的文字。"
range_obj.Bold = 1 # 1 表示 True, 0 表示 False
range_obj.InsertAfter(" 这是正常文字,\n\n")
# 添加斜体文本
range_obj.Text = "这是一段斜体的文字。"
range_obj.Italic = 1
range_obj.InsertAfter(" 这又是正常文字,\n\n")
# 保存
doc.SaveAs(r"C:\temp\formatted_document.docx")
print("格式化文档已保存。")
doc.Close()
word.Quit()
# --- 运行函数 ---
# format_text_in_doc()
示例 4:插入表格
import win32com.client as win32
def insert_table_in_doc():
word = win32.Dispatch('Word.Application')
word.Visible = 1
doc = word.Documents.Add()
# 在文档末尾插入一个3行4列的表格
# doc.Tables.Add(Range, NumRows, NumColumns)
# doc.Content.End 获取文档内容的末尾位置
range_at_end = doc.Content.End
table = doc.Tables.Add(range_at_end, 3, 4)
# 填充表格内容
table.Cell(1, 1).Range.Text = "姓名"
table.Cell(1, 2).Range.Text = "年龄"
table.Cell(1, 3).Range.Text = "城市"
table.Cell(1, 4).Range.Text = "职业"
table.Cell(2, 1).Range.Text = "张三"
table.Cell(2, 2).Range.Text = "30"
table.Cell(2, 3).Range.Text = "北京"
table.Cell(2, 4).Range.Text = "工程师"
table.Cell(3, 1).Range.Text = "李四"
table.Cell(3, 2).Range.Text = "25"
table.Cell(3, 3).Range.Text = "上海"
table.Cell(3, 4).Range.Text = "设计师"
# 保存
doc.SaveAs(r"C:\temp\document_with_table.docx")
print("包含表格的文档已保存。")
doc.Close()
word.Quit()
# --- 运行函数 ---
# insert_table_in_doc()
重要注意事项和最佳实践
- 错误处理:始终将你的代码放在
try...except块中,以防 Word 应用程序未安装、文件路径错误等情况发生。 - 资源释放:非常重要! 操作完成后,一定要调用
doc.Close()和word.Quit(),如果不这样做,Word 进程可能会在后台继续运行,占用系统资源,甚至导致文件被锁定。 - 隐藏与可见:在调试时,设置
word.Visible = 1可以让你看到 Word 的操作过程,方便理解代码逻辑,在生产环境中或自动化任务中,通常设置为word.Visible = 0以提高效率。 - 路径格式:在 Windows 中,路径字符串最好使用原始字符串(前面加
r),r"C:\my\doc.doc",这样可以避免反斜杠\被解释为转义字符。 .docvs.docx:SaveAs和Open方法都可以处理.doc和.docx文件,你只需要在文件名中指定正确的扩展名即可。- 对于旧版 Word (如 2003),默认保存格式是
.doc,对于新版 Word (2007+),默认是.docx,但通过pywin32控制,你可以自由指定格式。
- 性能:对于大量或非常频繁的文件操作,启动和关闭 Word 应用程序会带来性能开销,可以考虑在脚本开始时启动一次 Word,完成所有操作后再关闭它,而不是每个文件都启停一次。
使用 win32com 操作 Word 文件的核心流程可以总结为:
- 启动 Word:
word = win32.Dispatch('Word.Application') - 创建/打开文档:
- 新建:
doc = word.Documents.Add() - 打开:
doc = word.Documents.Open(path)
- 新建:
- :
-
doc.Content或doc.Range(...) - 写入:
range_obj.Text = "..."或range_obj.InsertAfter("...") - 读取:
full_text = doc.Content.Text - 格式化:
range_obj.Bold = 1,range_obj.Style = ... - 插入对象:
doc.Tables.Add(...),doc.InlineShapes.AddPicture(...)
-
- 保存:
doc.SaveAs(path) - 关闭:
doc.Close()和word.Quit()
希望这个详细的指南能帮助你开始在 Python 中使用 win32com 操作 Word 文档!

