Python實現Word文檔自動化排版的完整流程
一、核心工具準備
Python處理Word自動化排版的核心庫是python-docx,先完成環(huán)境安裝:
# 安裝python-docx庫(僅支持.docx格式,不支持老舊.doc格式) pip install python-docx
python-docx的核心能力:
- 控制字體、字號、顏色、加粗/斜體等字符樣式;
- 調整段落間距、對齊方式、縮進等段落格式;
- 美化表格(邊框、對齊、單元格合并);
- 設置頁眉頁腳、頁碼、文檔布局(頁邊距、紙張大?。?。
二、Word自動化排版完整流程(實戰(zhàn)案例)
以“員工手冊.docx”為例(原始文檔為無格式的純文本),按“基礎樣式→段落排版→表格美化→頁面布局→頁眉頁腳”的邏輯完成自動化排版。
步驟1:加載Word文檔并初始化基礎設置
先讀取原始文檔,配置全局字體(解決中文顯示問題),為后續(xù)排版打下基礎:
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文檔(或創(chuàng)建新文檔: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文檔
若有多個同類型文檔(如各部門的報告),可遍歷文件夾批量應用排版規(guī)則:
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():
# 創(chuàng)建新文檔
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自動化排版的資料請關注腳本之家其它相關文章!
相關文章
Python使用Tkinter+openpyxl處理Excel文件并顯示實時進度條
在項目開發(fā)或數據處理中,經常需要批量處理 Excel 文件,本文將分析如何使用 openpyxl 正確處理合并單元格并將單元格轉為字符串,同時結合 Tkinter 實現帶進度條的圖形界面實時顯示處理進度,感興趣的小伙伴可以了解下2026-01-01
Python使用get_text()方法從大段html中提取文本的實例
今天小編就為大家分享一篇Python使用get_text()方法從大段html中提取文本的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python使用Spire.Doc for .NET輕松實現Word和Markdown互轉
在寫作、技術文檔管理和知識庫建設中,Word 和 Markdown 是我們最常打交道的兩種文檔格式,本文將詳細介紹如何使用 Spire.Doc for .NET 在 Python 環(huán)境中高效實現 Word 與 Markdown 的互轉,有需要的小伙伴可以了解下2026-06-06
Python利用Beautiful Soup模塊創(chuàng)建對象詳解
這篇文章主要介紹了Python利用Beautiful Soup模塊創(chuàng)建對象的相關資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03

