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% 以上的办公场景,帮助你摆脱重复劳动。

扩展学习方向

  1. 结合 Excel 数据:使用pandas读取 Excel 数据,自动填充 Word 表格
  1. 模板化生成:使用jinja2模板引擎,基于 Word 模板动态替换内容
  1. 复杂格式处理:集成win32com.client调用 Word 宏、邮件合并等高级功能

Python 自动化办公的核心不是编写复杂代码,而是发现工作中的重复模式,用简单脚本实现替代。即使是几十行的基础代码,也能每天节省数小时的机械操作,让你专注于更有价值的分析与决策工作。

更多推荐