Python 自动化办公:Word 文件操作全教程(附极简实操代码)
Python 自动化办公:Word 文件操作全教程(附极简实操代码)
在日常办公场景中,Word 文档处理常伴随大量重复工作 —— 批量生成合同、统一修改格式、提取表格数据等。借助 Python 的python-docx库,只需几行代码就能实现这些操作的自动化,大幅减少机械劳动。本文从环境搭建到实战案例,系统讲解 Word 文件的创建、编辑、格式设置与数据提取,通过极简代码示例,帮助办公人员快速上手 Python 自动化办公技能。
一、环境准备:安装核心库与兼容性说明
处理 Word 文件的核心工具是python-docx库,需先完成安装并了解格式支持范围。
1. 安装python-docx库
通过 pip 命令快速安装,适用于 Windows、Mac、Linux 全平台:
# 基础安装命令
pip install python-docx
# 验证安装成功(输出版本号即正常)
python -c "import docx; print(f'python-docx版本:{docx.__version__}')"
2. 格式兼容性说明
- 支持格式:.docx(Word 2007 及以上版本,主流格式)
- 不支持格式:.doc(旧版二进制格式)、.wps(需先另存为.docx)
- 旧格式处理方案:若需操作.doc文件,Windows 用户可通过pywin32库调用 Office 组件,示例:
# 安装pywin32(仅限Windows)
pip install pywin32
二、基础操作:创建与编辑 Word 文档
从空白文档开始,学习文本添加、段落修改的核心方法,掌握文档编辑的基本流程。
1. 新建文档并添加内容
from docx import Document
# 1. 创建空白文档对象
doc = Document()
# 2. 添加标题(level=0为一级标题,1-9为次级标题)
doc.add_heading('Python自动化办公手册', level=0)
# 3. 添加带格式的段落
# 基础段落
para1 = doc.add_paragraph('本文档用于展示Python操作Word的核心功能,')
# 追加加粗内容
para1.add_run('包含文本、表格、图片等元素').bold = True
# 追加换行与普通文本
para1.add_run('\n适合办公人员快速上手自动化操作。')
# 4. 添加项目符号列表
doc.add_heading('核心功能', level=2)
doc.add_paragraph('批量生成标准化报告', style='List Bullet')
doc.add_paragraph('自动提取文档关键数据', style='List Bullet')
doc.add_paragraph('统一修改文档格式样式', style='List Bullet')
# 5. 保存文档(路径可自定义)
doc.save('Python办公手册.docx')
2. 打开并修改现有文档
from docx import Document
# 1. 打开已有文档(需确保文件路径正确)
doc = Document('现有文档.docx')
# 2. 遍历所有段落,替换指定内容
for para in doc.paragraphs:
# 将"2023年"替换为"2024年"
if '2023年' in para.text:
para.text = para.text.replace('2023年', '2024年')
# 3. 在文档末尾添加新内容
doc.add_paragraph('\n——此文档已通过Python自动化更新', style='Normal')
# 4. 另存为新文件(避免覆盖原文档)
doc.save('更新后的文档.docx')
关键说明:
- doc.paragraphs:返回文档中所有段落的列表,可遍历修改
- 段落文本修改通过para.text直接赋值实现,简单高效
- 建议操作后另存为新文件,防止原文档数据丢失

三、格式设置:让文档更规范
通过字体、段落、样式的统一设置,使自动化生成的文档符合办公规范,无需手动调整格式。
1. 字体与段落格式设置
from docx import Document
from docx.shared import Pt, RGBColor # 字号、颜色工具
from docx.enum.text import WD_ALIGN_PARAGRAPH # 对齐方式枚举
doc = Document()
# 1. 添加居中对齐的标题
title_para = doc.add_paragraph()
title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中对齐
title_run = title_para.add_run('季度工作总结')
# 设置字体格式
title_run.font.name = '微软雅黑'
title_run.font.size = Pt(20) # 20磅字号
title_run.font.color.rgb = RGBColor(0x33, 0x66, 0xCC) # 蓝色
title_run.bold = True # 加粗
# 2. 添加带行距的正文
content_para = doc.add_paragraph('本季度重点完成了3项核心工作,分别为:\n'*3)
content_para.paragraph_format.line_spacing = 1.5 # 1.5倍行距
content_para.paragraph_format.first_line_indent = Pt(24) # 首行缩进2字符(24磅)
doc.save('格式设置示例.docx')
2. 应用内置样式
python-docx提供 Word 内置样式,直接调用可快速统一格式:
from docx import Document
doc = Document()
# 调用内置标题样式
doc.add_paragraph('项目规划书', style='Heading 1')
# 调用内置引用样式
doc.add_paragraph('"自动化办公的核心是减少重复劳动,提升工作效率。"', style='Intense Quote')
# 调用内置编号列表样式
doc.add_paragraph('需求分析阶段', style='List Number')
doc.add_paragraph('开发测试阶段', style='List Number')
doc.add_paragraph('上线运维阶段', style='List Number')
doc.save('内置样式示例.docx')
常用内置样式:
- 标题类:Heading 1-Heading 9(一级到九级标题)
- 列表类:List Bullet(项目符号)、List Number(编号)
- 文本类:Normal(普通文本)、Intense Quote(引用)
四、表格操作:数据的高效管理
表格是 Word 文档中数据展示的核心形式,python-docx支持表格创建、数据填充与提取,满足办公数据处理需求。
1. 创建表格并填充数据
from docx import Document
from docx.enum.table import WD_ALIGN_VERTICAL # 单元格垂直对齐
from docx.shared import Cm # 厘米单位工具
doc = Document()
# 1. 创建3行4列的表格(rows=行数,cols=列数)
table = doc.add_table(rows=3, cols=4)
# 设置表格总宽度
table.width = Cm(15)
# 2. 填充表头(第一行)
headers = ['姓名', '部门', '职位', '入职日期']
for col_idx, header in enumerate(headers):
cell = table.cell(0, col_idx) # 获取第0行第col_idx列单元格
cell.text = header
# 表头文字加粗
cell.paragraphs[0].runs[0].bold = True
# 单元格垂直居中
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
# 3. 填充表格数据
data = [
['张三', '技术部', '前端开发', '2024-01-10'],
['李四', '产品部', '产品经理', '2024-02-15']
]
for row_idx, row_data in enumerate(data):
for col_idx, cell_data in enumerate(row_data):
# 从第1行开始填充(跳过表头)
table.cell(row_idx + 1, col_idx).text = cell_data
doc.save('员工信息表.docx')
2. 从表格中提取数据
from docx import Document
# 1. 打开包含表格的文档
doc = Document('员工信息表.docx')
# 2. 获取第一个表格(doc.tables返回所有表格列表)
table = doc.tables[0]
# 3. 提取表头
headers = [cell.text.strip() for cell in table.rows[0].cells]
print('表格表头:', headers)
# 4. 提取表格内容(跳过表头)
table_data = []
for row in table.rows[1:]:
row_content = [cell.text.strip() for cell in row.cells]
table_data.append(row_content)
# 5. 打印提取结果
print('表格数据:')
for row in table_data:
print(row)

五、进阶功能:图片插入与页面设置
添加图片和调整页面布局,使文档更具可读性和专业性,满足复杂办公场景需求。
1. 插入图片并设置尺寸
from docx import Document
from docx.shared import Inches # 英寸单位工具
doc = Document()
doc.add_heading('数据分析图表', level=1)
# 插入图片(支持png、jpg、gif格式)
# width=Inches(6):设置图片宽度为6英寸,高度自动按比例缩放
doc.add_picture('sales_chart.png', width=Inches(6))
# 图片下方添加说明文字(调用内置图注样式)
doc.add_paragraph('图1:2024年第一季度销售趋势图', style='Caption')
doc.save('含图片的文档.docx')
2. 页面布局调整
from docx import Document
from docx.shared import Inches
from docx.enum.section import WD_ORIENT # 页面方向枚举
doc = Document()
# 获取文档第一节(默认整个文档为一个节)
section = doc.sections[0]
# 1. 设置页面方向(横向)
section.orientation =WD_ORIENT.LANDSCAPE
# 2. 设置页边距(上、下、左、右均为1英寸)
section.top_margin = Inches(1)
section.bottom_margin = Inches(1)
section.left_margin = Inches(1)
section.right_margin = Inches(1)
# 3. 设置纸张大小(A4纸:宽21厘米=8.27英寸,高29.7厘米=11.69英寸)
section.page_width = Inches(8.27)
section.page_height = Inches(11.69)
doc.add_paragraph('这是横向布局的文档,适合展示宽表格或图表。')
doc.save('页面布局示例.docx')
六、实战案例:批量生成月度报告
结合前文所学知识,实现批量生成带表格、图片的标准化月度报告,模拟真实办公场景。
from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
def generate_monthly_report(month, data, img_path, output_path):
"""
批量生成月度报告
:param month: 月份(如"3月")
:param data: 报告数据(列表)
:param img_path: 图表路径
:param output_path: 输出路径
"""
doc = Document()
section = doc.sections[0]
# 设置页边距
section.left_margin = Inches(1)
section.right_margin = Inches(1)
# 1. 添加报告标题(居中)
title = doc.add_heading(f'2024年{month}销售报告', level=0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 2. 添加报告基本信息
doc.add_paragraph(f'报告生成日期:2024年{month[:-1]}月5日', style='Normal')
doc.add_paragraph(f'报告部门:销售部', style='Normal')
doc.add_page_break() # 分页
# 3. 添加销售数据表格
doc.add_heading('销售数据汇总', level=1)
table = doc.add_table(rows=1, cols=4)
# 表头
headers = ['产品名称', '销量(件)', '销售额(元)', '同比增长']
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
cell.paragraphs[0].runs[0].bold = True
# 填充数据
for item in data:
row = table.add_row()
row.cells[0].text = item['product']
row.cells[1].text = str(item['sales'])
row.cells[2].text = str(item['revenue'])
row.cells[3].text = item['growth']
# 4. 添加销售趋势图
doc.add_page_break()
doc.add_heading('销售趋势分析', level=1)
doc.add_picture(img_path, width=Inches(7))
doc.add_paragraph(f'图2:2024年{month}销售趋势图', style='Caption')
# 5. 保存报告
doc.save(output_path)
# 测试数据
sales_data = [
{'product': '产品A', 'sales': 1500, 'revenue': 300000, 'growth': '15%'},
{'product': '产品B', 'sales': 900, 'revenue': 180000, 'growth': '8%'}
]
# 批量生成3-5月报告
for month in ['3月', '4月', '5月']:
generate_monthly_report(
month=month,
data=sales_data,
img_path=f'{month}_trend.png', # 假设图表文件已准备好
output_path=f'2024年{month}销售报告.docx'
)
案例说明:
- 通过函数封装报告生成逻辑,只需传入不同参数即可批量生成
- 整合文本、表格、图片、分页等功能,符合真实办公报告需求
- 实际应用中,data参数可从 Excel 或数据库读取,无需手动输入
七、常见问题与解决方案
在操作过程中,可能遇到中文显示异常、格式错乱等问题,以下是针对性解决方法。
1. 中文显示异常
问题:设置中文字体后,文档中仍显示默认字体(如 Calibri)。
解决:需同时设置西文和中文字体,示例:
run.font.name = '微软雅黑' # 设置西文字体
# 单独设置中文字体(关键步骤)
run._element.rPr.rFonts.set(docx.oxml.ns.qn('w:eastAsia'), '微软雅黑')
2. 表格合并单元格
需求:合并表格中指定单元格(如合并第一行前两列)。
实现代码:
# 合并第0行第0列和第0行第1列单元格
table.cell(0, 0).merge(table.cell(0, 1))
3. 文档加密保护
需求:对生成的 Word 文档设置打开密码。
方案:python-docx不支持直接加密,Windows 用户可通过pywin32实现:
import win32com.client
# 初始化Word应用
word = win32com.client.Dispatch("Word.Application")
# 打开文档(Visible=False表示后台运行)
doc = word.Documents.Open(r'需要加密的文档.docx', Visible=False)
# 保存为加密文档(PasswordDocument为打开密码)
doc.SaveAs2(r'加密后的文档.docx', PasswordDocument='123456')
# 关闭文档和应用
doc.Close()
word.Quit()
八、总结与扩展学习
通过本文学习,可掌握 Python 操作 Word 文档的核心技能:从基础的文档创建、内容编辑,到进阶的格式设置、表格操作,再到实战级的批量报告生成。这些技能能覆盖 80% 以上的办公场景,帮助你摆脱重复劳动。
扩展学习方向
- 结合 Excel 数据:使用pandas读取 Excel 数据,自动填充 Word 表格
- 模板化生成:使用jinja2模板引擎,基于 Word 模板动态替换内容
- 复杂格式处理:集成win32com.client调用 Word 宏、邮件合并等高级功能
Python 自动化办公的核心不是编写复杂代码,而是发现工作中的重复模式,用简单脚本实现替代。即使是几十行的基础代码,也能每天节省数小时的机械操作,让你专注于更有价值的分析与决策工作。
更多推荐
所有评论(0)