如何用Python或其他语言批量修改14000个Word文件字体?
批量修改14000个Word文件字体的实现方案
针对14000个Word文件的批量字体修改需求,以下是Python实现方案(兼容.docx和.doc格式),同时提供VBA备选方案,全程保障文件安全。
Python 处理 .docx 文件(无需安装Word)
依赖安装
pip install python-docx
实现代码
import os from docx import Document from docx.shared import Pt from docx.oxml.ns import qn def modify_docx_font(file_path, new_font_name='微软雅黑', new_font_size=10.5): try: doc = Document(file_path) # 修改所有段落文本的字体 for para in doc.paragraphs: for run in para.runs: run.font.name = new_font_name # 适配中文字体 run._element.rPr.rFonts.set(qn('w:eastAsia'), new_font_name) run.font.size = Pt(new_font_size) # 修改表格内的字体 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: run.font.name = new_font_name run._element.rPr.rFonts.set(qn('w:eastAsia'), new_font_name) run.font.size = Pt(new_font_size) # 修改内置样式(确保样式应用的文本同步生效) for style in doc.styles: if style.type == 1: # 仅处理段落样式 style.font.name = new_font_name style._element.rPr.rFonts.set(qn('w:eastAsia'), new_font_name) style.font.size = Pt(new_font_size) # 保存文件(建议先备份原文件,再覆盖) doc.save(file_path) print(f"✅ 处理完成: {file_path}") except Exception as e: print(f"❌ 处理失败 {file_path}: {str(e)}") def batch_modify_docx(folder_path): # 遍历目标文件夹下所有docx文件 for root, _, files in os.walk(folder_path): for file in files: if file.lower().endswith('.docx'): modify_docx_font(os.path.join(root, file)) if __name__ == "__main__": # 替换为你的Word文件存放路径 target_folder = r'C:\Path\To\Your\WordFiles' batch_modify_docx(target_folder)
Python 处理 .doc 文件(需安装本地Word)
依赖安装
pip install pywin32
实现代码
import os import win32com.client as win32 from win32com.client import constants def modify_doc_font(file_path, new_font_name='微软雅黑', new_font_size=10.5): word_app = None try: # 启动Word后台进程 word_app = win32.gencache.EnsureDispatch('Word.Application') word_app.Visible = False word_app.DisplayAlerts = constants.wdAlertsNone # 打开文档 doc = word_app.Documents.Open(file_path) # 全选文档并设置字体 doc.Content.Select() word_app.Selection.Font.Name = new_font_name word_app.Selection.Font.NameFarEast = new_font_name word_app.Selection.Font.Size = new_font_size # 修改所有内置样式 for style in doc.Styles: if style.Type in (constants.wdStyleTypeParagraph, constants.wdStyleTypeCharacter): style.Font.Name = new_font_name style.Font.NameFarEast = new_font_name style.Font.Size = new_font_size # 保存并关闭文档 doc.Save() doc.Close() print(f"✅ 处理完成: {file_path}") except Exception as e: print(f"❌ 处理失败 {file_path}: {str(e)}") finally: # 确保Word进程关闭 if word_app: word_app.Quit() def batch_modify_doc(folder_path): for root, _, files in os.walk(folder_path): for file in files: if file.lower().endswith('.doc'): modify_doc_font(os.path.join(root, file)) if __name__ == "__main__": target_folder = r'C:\Path\To\Your\WordFiles' batch_modify_doc(target_folder)
备选方案:VBA 脚本(直接在Word中运行)
打开Word,按下 Alt+F11 进入VBA编辑器,插入模块后粘贴以下代码:
Sub BatchModifyFonts() Dim folderPath As String Dim fileName As String Dim doc As Document Dim newFontName As String Dim newFontSize As Single ' 配置参数 newFontName = "微软雅黑" newFontSize = 10.5 folderPath = "C:\Path\To\Your\WordFiles" fileName = Dir(folderPath & "\*.doc*") Do While fileName <> "" Set doc = Documents.Open(folderPath & "\" & fileName) ' 修改全部内容字体 doc.Content.Font.Name = newFontName doc.Content.Font.NameFarEast = newFontName doc.Content.Font.Size = newFontSize ' 修改所有样式 Dim style As Style For Each style In doc.Styles If style.Type = wdStyleTypeParagraph Or style.Type = wdStyleTypeCharacter Then style.Font.Name = newFontName style.Font.NameFarEast = newFontName style.Font.Size = newFontSize End If Next style doc.Save doc.Close fileName = Dir() Loop MsgBox "批量处理完成!" End Sub
关键注意事项(保障文件安全)
- 强制备份:处理前务必将所有文件复制到备份文件夹,在备份文件上操作,原文件保留。
- 分批处理:将14000个文件分成若干批次(如每批1000个),避免系统资源耗尽。
- 日志记录:可将代码中的print输出改为写入日志文件,方便后续排查失败文件。
- 字体兼容性:确保目标字体在本地系统中已安装,否则Word会自动替换为默认字体。
- .doc文件注意:使用pywin32方案时,不要在处理过程中手动打开Word,避免进程冲突。
内容的提问来源于stack exchange,提问作者axonrydex
相关产品推荐
相关产品推荐

