当前位置: 代码网 > it编程>前端脚本>Python > Python实现Word文档自动化排版的完整流程

Python实现Word文档自动化排版的完整流程

2026年01月09日 Python 我要评论
一、核心工具准备python处理word自动化排版的核心库是python-docx,先完成环境安装:# 安装python-docx库(仅支持.docx格式,不支持老旧.doc格式)pip instal

一、核心工具准备

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自动化排版的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com