一、核心工具准备
python处理word自动化排版的核心库是python-docx,先完成环境安装:
# 安装python-docx库(仅支持.docx格式,不支持老旧.doc格式) pip install python-docx
python-docx的核心能力:
- 控制字体、字号、颜色、加粗/斜体等字符样式;
- 调整段落间距、对齐方式、缩进等段落格式;
- 美化表格(边框、对齐、单元格合并);
- 设置页眉页脚、页码、文档布局(页边距、纸张大小)。
二、word自动化排版完整流程(实战案例)
以“员工手册.docx”为例(原始文档为无格式的纯文本),按“基础样式→段落排版→表格美化→页面布局→页眉页脚”的逻辑完成自动化排版。
步骤1:加载word文档并初始化基础设置
先读取原始文档,配置全局字体(解决中文显示问题),为后续排版打下基础:
from docx import document
from docx.shared import pt, inches, rgbcolor
from docx.enum.text import wd_paragraph_alignment
from docx.enum.table import wd_table_alignment
from docx.oxml.ns import qn
# 1. 加载原始word文档(或创建新文档:doc = document())
doc = document("员工手册_原始.docx")
# 2. 设置文档全局字体(关键:解决中文显示异常)
# 全局默认样式:微软雅黑、小四(12磅)、黑色
normal_style = doc.styles['normal']
normal_style.font.name = '微软雅黑' # 西文字体
normal_style._element.rpr.rfonts.set(qn('w:eastasia'), '微软雅黑') # 中文字体
normal_style.font.size = pt(12)
normal_style.font.color.rgb = rgbcolor(0, 0, 0) # 黑色
print("文档加载并完成全局字体初始化!")
步骤2:字符样式自动化排版(字体、字号、颜色)
针对标题、正文、强调文本等不同字符类型,批量设置统一样式,替代手动选中文本调整格式:
# 定义样式配置函数(复用性更高)
def set_char_style(run, font_name='微软雅黑', font_size=12, bold=false, italic=false, color=rgbcolor(0,0,0)):
"""
配置字符样式
:param run: 字符运行对象(docx.text.run.run)
:param font_name: 字体名称
:param font_size: 字号(磅)
:param bold: 是否加粗
:param italic: 是否斜体
:param color: 字体颜色(rgbcolor)
"""
run.font.name = font_name
run._element.rpr.rfonts.set(qn('w:eastasia'), font_name)
run.font.size = pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
# 1. 批量设置标题样式(文档中前3个段落为一级/二级/三级标题)
# 一级标题:二号字、加粗、居中、深蓝色
title1 = doc.paragraphs[0].runs[0]
set_char_style(title1, font_size=22, bold=true, color=rgbcolor(0, 51, 102))
doc.paragraphs[0].alignment = wd_paragraph_alignment.center
# 二级标题:小三号字、加粗、左对齐、深蓝色
title2 = doc.paragraphs[1].runs[0]
set_char_style(title2, font_size=15, bold=true, color=rgbcolor(0, 51, 102))
doc.paragraphs[1].alignment = wd_paragraph_alignment.left
# 三级标题:小四号字、加粗、左对齐、深灰色
title3 = doc.paragraphs[2].runs[0]
set_char_style(title3, font_size=12, bold=true, color=rgbcolor(51, 51, 51))
doc.paragraphs[2].alignment = wd_paragraph_alignment.left
# 2. 批量设置正文强调文本(如“注意:”“警告:”标红加粗)
for para in doc.paragraphs:
for run in para.runs:
if "注意:" in run.text:
set_char_style(run, bold=true, color=rgbcolor(255, 0, 0))
elif "警告:" in run.text:
set_char_style(run, bold=true, color=rgbcolor(255, 102, 0))
print("字符样式排版完成!")
步骤3:段落格式自动化排版(间距、缩进、对齐)
调整段落的行间距、段前段后间距、首行缩进等,解决手动调整段落格式的繁琐:
# 定义段落样式配置函数
def set_para_style(para, line_spacing=1.5, space_before=0, space_after=5, indent=2):
"""
配置段落样式
:param para: 段落对象(docx.text.paragraph.paragraph)
:param line_spacing: 行间距(倍)
:param space_before: 段前间距(磅)
:param space_after: 段后间距(磅)
:param indent: 首行缩进(字符数)
"""
# 行间距
para.paragraph_format.line_spacing = line_spacing
# 段前/段后间距(磅)
para.paragraph_format.space_before = pt(space_before)
para.paragraph_format.space_after = pt(space_after)
# 首行缩进(2字符,需转换为磅,1字符≈12磅)
para.paragraph_format.first_line_indent = pt(indent * 12)
# 1. 批量设置正文段落格式(跳过前3个标题段落)
for i, para in enumerate(doc.paragraphs):
if i >= 3: # 标题段落已单独设置,仅处理正文
set_para_style(
para,
line_spacing=1.5, # 1.5倍行间距
space_before=0, # 段前0磅
space_after=5, # 段后5磅
indent=2 # 首行缩进2字符
)
# 2. 单独调整标题段落的间距
doc.paragraphs[0].paragraph_format.space_after = pt(15) # 一级标题段后15磅
doc.paragraphs[1].paragraph_format.space_after = pt(10) # 二级标题段后10磅
doc.paragraphs[2].paragraph_format.space_after = pt(8) # 三级标题段后8磅
print("段落格式排版完成!")
步骤4:表格自动化美化(边框、对齐、单元格格式)
word中的表格常需手动调整边框、单元格对齐、列宽,通过代码批量美化:
# 遍历文档中所有表格,统一美化
for table in doc.tables:
# 1. 表格整体样式:居中对齐、显示边框
table.alignment = wd_table_alignment.center
table.style = 'table grid' # 显示完整边框(内置样式)
# 2. 设置表头样式(第一行)
for cell in table.rows[0].cells:
# 表头文字:加粗、居中、浅蓝色背景
for para in cell.paragraphs:
para.alignment = wd_paragraph_alignment.center
for run in para.runs:
set_char_style(run, bold=true, color=rgbcolor(0, 51, 102))
# 单元格背景色(浅蓝色)
cell.fill.color.rgb = rgbcolor(230, 243, 255)
# 3. 设置正文行样式:文字居中、调整列宽
for row in table.rows[1:]:
for i, cell in enumerate(row.cells):
# 单元格文字居中
for para in cell.paragraphs:
para.alignment = wd_paragraph_alignment.center
# 按列调整宽度(第1列2英寸,其余1.5英寸)
cell.width = inches(2) if i == 0 else inches(1.5)
print("表格美化完成!")
步骤5:页面布局与页眉页脚自动化设置
配置页边距、纸张大小、页码、页眉等页面级格式,替代手动调整“页面布局”和“插入页眉页脚”:
from docx.enum.section import wd_orientation
from docx.enum.text import wd_align_paragraph
# 1. 设置页面布局(a4纸张、页边距)
section = doc.sections[0]
section.page_width = inches(8.27) # a4宽度
section.page_height = inches(11.69) # a4高度
# 设置页边距(上2.54cm,下2.54cm,左3cm,右2.5cm)
section.top_margin = inches(1) # 1英寸≈2.54cm
section.bottom_margin = inches(1)
section.left_margin = inches(1.18)
section.right_margin = inches(0.98)
# 2. 设置页眉(文档名称+分隔线)
header = section.header
header_para = header.paragraphs[0]
header_para.text = "xx公司员工手册 - 标准化文档"
header_para.alignment = wd_paragraph_alignment.center
# 页眉文字样式:小五号字、灰色
for run in header_para.runs:
set_char_style(run, font_size=10.5, color=rgbcolor(102, 102, 102))
# 3. 设置页脚(页码+日期)
footer = section.footer
# 页码段落(居中)
footer_para1 = footer.paragraphs[0]
footer_para1.text = "第 {page} 页,共 {numpages} 页"
footer_para1.alignment = wd_paragraph_alignment.center
# 日期段落(右对齐)
footer_para2 = footer.add_paragraph("2025年01月01日")
footer_para2.alignment = wd_paragraph_alignment.right
for run in footer_para2.runs:
set_char_style(run, font_size=10.5)
print("页面布局与页眉页脚设置完成!")
步骤6:保存排版后的文档
# 保存排版后的文档
doc.save("员工手册_排版完成.docx")
print("word文档自动化排版完成,已保存为「员工手册_排版完成.docx」!")
三、高频排版场景拓展
场景1:批量排版多份word文档
若有多个同类型文档(如各部门的报告),可遍历文件夹批量应用排版规则:
import os
# 定义排版函数(复用上述所有逻辑)
def format_word(file_path, output_path):
doc = document(file_path)
# 1. 全局字体设置(省略,同步骤1)
# 2. 字符样式设置(省略,同步骤2)
# 3. 段落格式设置(省略,同步骤3)
# 4. 表格美化(省略,同步骤4)
# 5. 页面布局(省略,同步骤5)
doc.save(output_path)
# 遍历文件夹中的word文档
input_folder = "待排版文档"
output_folder = "排版完成文档"
if not os.path.exists(output_folder):
os.mkdir(output_folder)
for file_name in os.listdir(input_folder):
if file_name.endswith(".docx"):
input_path = os.path.join(input_folder, file_name)
output_path = os.path.join(output_folder, file_name.replace(".docx", "_排版完成.docx"))
format_word(input_path, output_path)
print("多份word文档批量排版完成!")
场景2:按模板批量生成并排版文档
结合excel数据源,批量生成带标准化排版的word文档(如员工通知书):
import pandas as pd
# 读取excel中的员工数据
df = pd.read_excel("员工信息.xlsx")
for index, row in df.iterrows():
# 创建新文档
doc = document()
# 1. 设置全局字体
normal_style = doc.styles['normal']
normal_style.font.name = '微软雅黑'
normal_style._element.rpr.rfonts.set(qn('w:eastasia'), '微软雅黑')
# 2. 添加标题并排版
title = doc.add_heading(f'{row["姓名"]}的转正通知书', level=0)
title.alignment = wd_paragraph_alignment.center
set_char_style(title.runs[0], font_size=22, bold=true)
# 3. 添加正文并排版
para = doc.add_paragraph(f'尊敬的{row["姓名"]}:您于{row["入职日期"]}入职,现正式转正。')
set_para_style(para, indent=2)
# 4. 添加表格并美化(省略,同步骤4)
# 5. 保存文档
doc.save(f'转正通知书_{row["姓名"]}.docx')
print("批量生成并排版word文档完成!")
四、常见问题与解决方法
1.中文字体显示异常:必须同时设置font.name(西文)和eastasia(中文)字体,缺一不可:
run.font.name = '微软雅黑'
run._element.rpr.rfonts.set(qn('w:eastasia'), '微软雅黑')
2.行间距设置无效:line_spacing支持多种格式,建议用“倍数”或固定值:
para.paragraph_format.line_spacing = pt(20) # 固定20磅行间距 para.paragraph_format.line_spacing = 1.5 # 1.5倍行间距
3.表格边框不显示:需指定内置表格样式,而非仅设置单元格边框:
table.style = 'table grid' # 显示完整边框
4.页码占位符不生效:{page} {numpages}是word域代码,需保存后在word中更新域:
- 手动更新:选中页码 → 右键 → 更新域;
- 自动更新:可结合
win32com库(需额外安装pywin32)。
5.段落缩进计算错误:1个中文字符≈12磅,首行缩进2字符需设置为pt(24):
para.paragraph_format.first_line_indent = pt(2 * 12)
以上就是python实现word文档自动化排版的完整流程的详细内容,更多关于python word自动化排版的资料请关注代码网其它相关文章!
发表评论