我的知识记录

Python批量修改Word字体字号颜色教程

用python-docx批量修改Word文档所有段落的字体、字号、颜色、加粗,支持批量处理多个docx文件,统一排版风格,省去逐段手动调整的麻烦。

场景痛点

公司拿到一批外部发来的Word文档,字体五花八门、字号大小不一、颜色乱七八糟,不符合内部排版规范。手动打开每个文件全选改字体,一份文档点几十次,几十份文件就要重复几百次。用python-docx可以遍历文档所有段落和run,一次性把字体、字号、颜色全部统一,批量处理多个文件也只是改个文件夹路径。

用到的库

pip install python-docx

完整代码

# 导入库
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
import os

def set_run_font(run, font_name='宋体', size=12, bold=False, color=(0, 0, 0)):
"""
设置一个run的字体格式
font_name: 字体名,如宋体、微软雅黑
size: 字号,单位磅
bold: 是否加粗
color: 字体颜色RGB元组
"""
# 设置西文字体
run.font.name = font_name
# 关键:设置中文字体(python-docx默认只设西文,中文需要单独指定eastAsia)
run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
# 设置字号
run.font.size = Pt(size)
# 设置加粗
run.bold = bold
# 设置颜色
run.font.color.rgb = RGBColor(*color)

def batch_change_font(docx_path, output_path):
# 打开文档
doc = Document(docx_path)

# 遍历所有段落,修改每个run的字体
for para in doc.paragraphs:
for run in para.runs:
if run.text.strip():  # 只改有文字的run
set_run_font(run, font_name='微软雅黑', size=12, color=(0, 0, 0))

# 遍历所有表格里的文字,同样修改
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
if run.text.strip():
set_run_font(run, font_name='微软雅黑', size=11, color=(51, 51, 51))

# 保存修改后的文档
doc.save(output_path)
print(f'已处理:{output_path}')

def batch_change_folder(folder_path):
# 批量处理一个文件夹下所有docx文件
for filename in os.listdir(folder_path):
if filename.endswith('.docx') and not filename.startswith('~'):
input_path = os.path.join(folder_path, filename)
output_path = os.path.join(folder_path, '修改后_' + filename)
batch_change_font(input_path, output_path)

if __name__ == '__main__':
# 单文件处理示例
batch_change_font('demo.docx', '修改后_demo.docx')

# 批量处理文件夹(取消注释即可)
# batch_change_folder('./word_files')

代码讲解

  • set_run_font()是核心函数,封装了字体设置逻辑。run.font.name设西文字体,run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)这行是关键——python-docx默认只设置西文字体,中文必须通过XML层单独指定eastAsia属性才能真正生效。
  • run.font.size = Pt(size)设置字号,单位是磅(Pt),Word里的五号字对应10.5磅,小四对应12磅,四号对应14磅。
  • run.font.color.rgb = RGBColor(*color)设置字体颜色,传入RGB三元组。
  • 段落遍历doc.paragraphs只处理正文段落,表格里的文字需要单独遍历doc.tables嵌套处理,两者不能漏。
  • 批量处理文件夹时用os.listdir遍历,过滤.docx后缀,同时跳过Word临时文件(文件名以~开头的)。

运行结果

单文件运行后生成修改后_demo.docx,打开可以看到所有正文段落统一变成微软雅黑12号黑色,表格里的文字变成微软雅黑11号深灰色。批量处理文件夹后,每个原文件旁边都生成一个修改后_xxx.docx

注意事项

  • 中文字体设置必须同时设eastAsia,否则Word打开后中文还是默认宋体,这是python-docx最常见的坑。
  • 字体名要写系统里实际存在的字体,比如宋体微软雅黑黑体,如果目标电脑没装这个字体会自动回退。
  • 修改前建议先备份原文件,脚本不会覆盖原文件(输出文件名加了前缀),但手动改路径时要注意。
  • 标题样式如果用了Word内置Heading样式,单独改run可能不生效,需要同时改style定义。

Python批量修改Word字体字号颜色教程

标签:

更新时间:2026-09-15 09:01:08

上一篇:Python批量修改Word表格内容教程

下一篇:Python写入Excel数据并保存:从零生成xlsx文件