Python+Word办公自动化:10分钟掌握高效文档处理,告别996加班!
引言
在职场中,Word文档处理是高频却耗时的任务——批量生成报告、重复填写表格、手动调整格式……
而Python的python-docx库,能让你用代码轻松实现文档自动化,效率提升10倍!
本文将手把手教你5大核心技巧,覆盖文档创建、样式设计、批量生成等场景,附完整代码,小白也能快速上手!
一、5分钟创建专业文档:从标题到表格全搞定16
- 标题与段落
用add_heading()和add_paragraph()快速生成结构清晰的文档:
from docx import Document
document = Document()
document.add_heading('年度报告', level=0) # 主标题
document.add_paragraph('第一季度业绩增长30%', style='Intense Quote') # 引用样式段落
- 插入表格与数据填充
动态生成表格,告别复制粘贴:
table = document.add_table(rows=1, cols=3)
table.style = 'Table Grid'
header = table.rows[0].cells
header[0].text, header[1].text, header[2].text = '姓名', '部门', '销售额'
# 动态添加数据行
data = [('张三', '销售部', 'yen50万'), ('李四', '技术部', 'yen30万')]
for row in data:
new_row = table.add_row().cells
new_row[0].text, new_row[1].text, new_row[2].text = row
二、高级样式设计:让文档秒变“高颜值”26
- 字体与颜色
精准控制字体大小、加粗、颜色:
paragraph = document.add_paragraph()
run = paragraph.add_run('重点内容:')
run.bold = True
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(255, 0, 0) # 红色字体
- 段落对齐与缩进
专业排版必备:
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
paragraph = document.add_paragraph('居中标题')
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中
paragraph.paragraph_format.first_line_indent = Cm(0.74) # 首行缩进
三、批量生成文档:1行代码生成100份合同
核心思路:数据模板化 + 循环写入
user_data = [
{'name': '张三', 'date': '2025-03-01'},
{'name': '李四', 'date': '2025-03-02'}
]
for data in user_data:
doc = Document()
doc.add_heading(f'{data["name"]}的入职通知书', 0)
doc.add_paragraph(f'入职日期:{data["date"]}')
doc.save(f'{data["name"]}_通知.docx')
适用场景:劳动合同、证书、报告等模板化文档。
四、进阶技巧:图片、分页与复杂表格210
- 插入图片与分页
自动插入Logo或图表:
document.add_picture('logo.png', width=Cm(5))
document.add_page_break() # 强制分页
- 合并单元格与垂直对齐
制作复杂表格:
table = document.add_table(rows=3, cols=3)
cell = table.cell(0, 1)
cell.merge(table.cell(0, 2)) # 合并单元格
cell.text = '合并标题'
cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中
五、避坑指南:常见问题与解决方案
- 文件格式问题:
仅支持.docx,若需处理旧版.doc文件,可用win32com库转换12。 - 样式不生效:
检查样式名称是否拼写正确(如List Number vs ListNumber)。 - 读取文档内容:
doc = Document('报告.docx')
for para in doc.paragraphs:
print(para.text)