最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)Word文檔自動(dòng)化排版的完整流程

 更新時(shí)間:2026年01月09日 09:04:38   作者:愛吃提升  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)Word文檔自動(dòng)化排版的完整流程,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下

一、核心工具準(zhǔn)備

Python處理Word自動(dòng)化排版的核心庫是python-docx,先完成環(huán)境安裝:

# 安裝python-docx庫(僅支持.docx格式,不支持老舊.doc格式)
pip install python-docx

python-docx的核心能力:

  • 控制字體、字號(hào)、顏色、加粗/斜體等字符樣式;
  • 調(diào)整段落間距、對(duì)齊方式、縮進(jìn)等段落格式;
  • 美化表格(邊框、對(duì)齊、單元格合并);
  • 設(shè)置頁眉頁腳、頁碼、文檔布局(頁邊距、紙張大?。?。

二、Word自動(dòng)化排版完整流程(實(shí)戰(zhàn)案例)

以“員工手冊(cè).docx”為例(原始文檔為無格式的純文本),按“基礎(chǔ)樣式→段落排版→表格美化→頁面布局→頁眉頁腳”的邏輯完成自動(dòng)化排版。

步驟1:加載Word文檔并初始化基礎(chǔ)設(shè)置

先讀取原始文檔,配置全局字體(解決中文顯示問題),為后續(xù)排版打下基礎(chǔ):

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("員工手冊(cè)_原始.docx")

# 2. 設(shè)置文檔全局字體(關(guān)鍵:解決中文顯示異常)
# 全局默認(rèn)樣式:微軟雅黑、小四(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:字符樣式自動(dòng)化排版(字體、字號(hào)、顏色)

針對(duì)標(biāo)題、正文、強(qiáng)調(diào)文本等不同字符類型,批量設(shè)置統(tǒng)一樣式,替代手動(dòng)選中文本調(diào)整格式:

# 定義樣式配置函數(shù)(復(fù)用性更高)
def set_char_style(run, font_name='微軟雅黑', font_size=12, bold=False, italic=False, color=RGBColor(0,0,0)):
    """
    配置字符樣式
    :param run: 字符運(yùn)行對(duì)象(docx.text.run.Run)
    :param font_name: 字體名稱
    :param font_size: 字號(hào)(磅)
    :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. 批量設(shè)置標(biāo)題樣式(文檔中前3個(gè)段落為一級(jí)/二級(jí)/三級(jí)標(biāo)題)
# 一級(jí)標(biāo)題:二號(hào)字、加粗、居中、深藍(lán)色
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

# 二級(jí)標(biāo)題:小三號(hào)字、加粗、左對(duì)齊、深藍(lán)色
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

# 三級(jí)標(biāo)題:小四號(hào)字、加粗、左對(duì)齊、深灰色
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. 批量設(shè)置正文強(qiáng)調(diào)文本(如“注意:”“警告:”標(biāo)紅加粗)
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:段落格式自動(dòng)化排版(間距、縮進(jìn)、對(duì)齊)

調(diào)整段落的行間距、段前段后間距、首行縮進(jìn)等,解決手動(dòng)調(diào)整段落格式的繁瑣:

# 定義段落樣式配置函數(shù)
def set_para_style(para, line_spacing=1.5, space_before=0, space_after=5, indent=2):
    """
    配置段落樣式
    :param para: 段落對(duì)象(docx.text.paragraph.Paragraph)
    :param line_spacing: 行間距(倍)
    :param space_before: 段前間距(磅)
    :param space_after: 段后間距(磅)
    :param indent: 首行縮進(jìn)(字符數(shù))
    """
    # 行間距
    para.paragraph_format.line_spacing = line_spacing
    # 段前/段后間距(磅)
    para.paragraph_format.space_before = Pt(space_before)
    para.paragraph_format.space_after = Pt(space_after)
    # 首行縮進(jìn)(2字符,需轉(zhuǎn)換為磅,1字符≈12磅)
    para.paragraph_format.first_line_indent = Pt(indent * 12)

# 1. 批量設(shè)置正文段落格式(跳過前3個(gè)標(biāo)題段落)
for i, para in enumerate(doc.paragraphs):
    if i >= 3:  # 標(biāo)題段落已單獨(dú)設(shè)置,僅處理正文
        set_para_style(
            para,
            line_spacing=1.5,  # 1.5倍行間距
            space_before=0,    # 段前0磅
            space_after=5,     # 段后5磅
            indent=2           # 首行縮進(jìn)2字符
        )

# 2. 單獨(dú)調(diào)整標(biāo)題段落的間距
doc.paragraphs[0].paragraph_format.space_after = Pt(15)  # 一級(jí)標(biāo)題段后15磅
doc.paragraphs[1].paragraph_format.space_after = Pt(10)  # 二級(jí)標(biāo)題段后10磅
doc.paragraphs[2].paragraph_format.space_after = Pt(8)   # 三級(jí)標(biāo)題段后8磅

print("段落格式排版完成!")

步驟4:表格自動(dòng)化美化(邊框、對(duì)齊、單元格格式)

Word中的表格常需手動(dòng)調(diào)整邊框、單元格對(duì)齊、列寬,通過代碼批量美化:

# 遍歷文檔中所有表格,統(tǒng)一美化
for table in doc.tables:
    # 1. 表格整體樣式:居中對(duì)齊、顯示邊框
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    table.style = 'Table Grid'  # 顯示完整邊框(內(nèi)置樣式)
    
    # 2. 設(shè)置表頭樣式(第一行)
    for cell in table.rows[0].cells:
        # 表頭文字:加粗、居中、淺藍(lán)色背景
        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))
        # 單元格背景色(淺藍(lán)色)
        cell.fill.color.rgb = RGBColor(230, 243, 255)
    
    # 3. 設(shè)置正文行樣式:文字居中、調(diào)整列寬
    for row in table.rows[1:]:
        for i, cell in enumerate(row.cells):
            # 單元格文字居中
            for para in cell.paragraphs:
                para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
            # 按列調(diào)整寬度(第1列2英寸,其余1.5英寸)
            cell.width = Inches(2) if i == 0 else Inches(1.5)

print("表格美化完成!")

步驟5:頁面布局與頁眉頁腳自動(dòng)化設(shè)置

配置頁邊距、紙張大小、頁碼、頁眉等頁面級(jí)格式,替代手動(dòng)調(diào)整“頁面布局”和“插入頁眉頁腳”:

from docx.enum.section import WD_ORIENTATION
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 1. 設(shè)置頁面布局(A4紙張、頁邊距)
section = doc.sections[0]
section.page_width = Inches(8.27)  # A4寬度
section.page_height = Inches(11.69) # A4高度
# 設(shè)置頁邊距(上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. 設(shè)置頁眉(文檔名稱+分隔線)
header = section.header
header_para = header.paragraphs[0]
header_para.text = "XX公司員工手冊(cè) - 標(biāo)準(zhǔn)化文檔"
header_para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 頁眉文字樣式:小五號(hào)字、灰色
for run in header_para.runs:
    set_char_style(run, font_size=10.5, color=RGBColor(102, 102, 102))

# 3. 設(shè)置頁腳(頁碼+日期)
footer = section.footer
# 頁碼段落(居中)
footer_para1 = footer.paragraphs[0]
footer_para1.text = "第 {PAGE} 頁,共 {NUMPAGES} 頁"
footer_para1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 日期段落(右對(duì)齊)
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("頁面布局與頁眉頁腳設(shè)置完成!")

步驟6:保存排版后的文檔

# 保存排版后的文檔
doc.save("員工手冊(cè)_排版完成.docx")
print("Word文檔自動(dòng)化排版完成,已保存為「員工手冊(cè)_排版完成.docx」!")

三、高頻排版場(chǎng)景拓展

場(chǎng)景1:批量排版多份Word文檔

若有多個(gè)同類型文檔(如各部門的報(bào)告),可遍歷文件夾批量應(yīng)用排版規(guī)則:

import os

# 定義排版函數(shù)(復(fù)用上述所有邏輯)
def format_word(file_path, output_path):
    doc = Document(file_path)
    # 1. 全局字體設(shè)置(省略,同步驟1)
    # 2. 字符樣式設(shè)置(省略,同步驟2)
    # 3. 段落格式設(shè)置(省略,同步驟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文檔批量排版完成!")

場(chǎng)景2:按模板批量生成并排版文檔

結(jié)合Excel數(shù)據(jù)源,批量生成帶標(biāo)準(zhǔn)化排版的Word文檔(如員工通知書):

import pandas as pd

# 讀取Excel中的員工數(shù)據(jù)
df = pd.read_excel("員工信息.xlsx")

for index, row in df.iterrows():
    # 創(chuàng)建新文檔
    doc = Document()
    # 1. 設(shè)置全局字體
    normal_style = doc.styles['Normal']
    normal_style.font.name = '微軟雅黑'
    normal_style._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')
    
    # 2. 添加標(biāo)題并排版
    title = doc.add_heading(f'{row["姓名"]}的轉(zhuǎn)正通知書', 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["入職日期"]}入職,現(xiàn)正式轉(zhuǎn)正。')
    set_para_style(para, indent=2)
    
    # 4. 添加表格并美化(省略,同步驟4)
    
    # 5. 保存文檔
    doc.save(f'轉(zhuǎn)正通知書_{row["姓名"]}.docx')

print("批量生成并排版Word文檔完成!")

四、常見問題與解決方法

1.中文字體顯示異常:必須同時(shí)設(shè)置font.name(西文)和eastAsia(中文)字體,缺一不可:

run.font.name = '微軟雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')

2.行間距設(shè)置無效line_spacing支持多種格式,建議用“倍數(shù)”或固定值:

para.paragraph_format.line_spacing = Pt(20)  # 固定20磅行間距
para.paragraph_format.line_spacing = 1.5     # 1.5倍行間距

3.表格邊框不顯示:需指定內(nèi)置表格樣式,而非僅設(shè)置單元格邊框:

table.style = 'Table Grid'  # 顯示完整邊框

4.頁碼占位符不生效{PAGE} {NUMPAGES}是Word域代碼,需保存后在Word中更新域:

  • 手動(dòng)更新:選中頁碼 → 右鍵 → 更新域;
  • 自動(dòng)更新:可結(jié)合win32com庫(需額外安裝pywin32)。

5.段落縮進(jìn)計(jì)算錯(cuò)誤:1個(gè)中文字符≈12磅,首行縮進(jìn)2字符需設(shè)置為Pt(24)

para.paragraph_format.first_line_indent = Pt(2 * 12)

以上就是Python實(shí)現(xiàn)Word文檔自動(dòng)化排版的完整流程的詳細(xì)內(nèi)容,更多關(guān)于Python Word自動(dòng)化排版的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Python?+?PyQt搭建可視化頁面的詳細(xì)教程

    基于Python?+?PyQt搭建可視化頁面的詳細(xì)教程

    PyQt是一個(gè)Python綁定庫,它是基于Qt庫的,PyQt提供了一整套豐富的組件,包括窗口、按鈕、菜單、列表框等,以及事件處理、布局管理、網(wǎng)絡(luò)通信等多種功能,本文介紹了基于Python?+?PyQt搭建可視化頁面的詳細(xì)教程,需要的朋友可以參考下
    2024-07-07
  • Python使用Tkinter+openpyxl處理Excel文件并顯示實(shí)時(shí)進(jìn)度條

    Python使用Tkinter+openpyxl處理Excel文件并顯示實(shí)時(shí)進(jìn)度條

    在項(xiàng)目開發(fā)或數(shù)據(jù)處理中,經(jīng)常需要批量處理 Excel 文件,本文將分析如何使用 openpyxl 正確處理合并單元格并將單元格轉(zhuǎn)為字符串,同時(shí)結(jié)合 Tkinter 實(shí)現(xiàn)帶進(jìn)度條的圖形界面實(shí)時(shí)顯示處理進(jìn)度,感興趣的小伙伴可以了解下
    2026-01-01
  • Python如何讀取PDF文檔(或TXT)

    Python如何讀取PDF文檔(或TXT)

    這篇文章主要介紹了Python如何讀取PDF文檔(或TXT),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python數(shù)字圖像處理之圖像自動(dòng)閾值分割示例

    python數(shù)字圖像處理之圖像自動(dòng)閾值分割示例

    這篇文章主要為大家介紹了python數(shù)字圖像處理之圖像自動(dòng)閾值分割示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python+Opencv實(shí)現(xiàn)圖像匹配功能(模板匹配)

    Python+Opencv實(shí)現(xiàn)圖像匹配功能(模板匹配)

    這篇文章主要為大家詳細(xì)介紹了Python+Opencv實(shí)現(xiàn)圖像匹配功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python使用get_text()方法從大段html中提取文本的實(shí)例

    Python使用get_text()方法從大段html中提取文本的實(shí)例

    今天小編就為大家分享一篇Python使用get_text()方法從大段html中提取文本的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python使用Spire.Doc for .NET輕松實(shí)現(xiàn)Word和Markdown互轉(zhuǎn)

    Python使用Spire.Doc for .NET輕松實(shí)現(xiàn)Word和Markdown互轉(zhuǎn)

    在寫作、技術(shù)文檔管理和知識(shí)庫建設(shè)中,Word 和 Markdown 是我們最常打交道的兩種文檔格式,本文將詳細(xì)介紹如何使用 Spire.Doc for .NET 在 Python 環(huán)境中高效實(shí)現(xiàn) Word 與 Markdown 的互轉(zhuǎn),有需要的小伙伴可以了解下
    2026-06-06
  • Python蓄水池算法的應(yīng)用案例與代碼詳解

    Python蓄水池算法的應(yīng)用案例與代碼詳解

    蓄水池算法(Reservoir Sampling)是一種用于處理大規(guī)模數(shù)據(jù)流的隨機(jī)抽樣算法,該算法能夠在不知道數(shù)據(jù)流大小的情況下,從數(shù)據(jù)流中均勻隨機(jī)地抽取固定大小的樣本,本文給大家介紹了一個(gè)詳細(xì)的Python蓄水池算法的實(shí)現(xiàn),包括完整的代碼示例,需要的朋友可以參考下
    2024-11-11
  • Python利用Beautiful Soup模塊創(chuàng)建對(duì)象詳解

    Python利用Beautiful Soup模塊創(chuàng)建對(duì)象詳解

    這篇文章主要介紹了Python利用Beautiful Soup模塊創(chuàng)建對(duì)象的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Python通過cv2讀取多個(gè)USB攝像頭

    Python通過cv2讀取多個(gè)USB攝像頭

    這篇文章主要為大家詳細(xì)介紹了Python通過cv2讀取多個(gè)USB攝像頭,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評(píng)論

绍兴县| 宜城市| 苏尼特右旗| 吴旗县| 河间市| 密山市| 宣武区| 玛纳斯县| 夏津县| 成武县| 永顺县| 中山市| 晋江市| 泰兴市| 贵德县| 台江县| 安吉县| 靖远县| 封开县| 霍州市| 潼南县| 望都县| 杂多县| 松江区| 蓬溪县| 陈巴尔虎旗| 湘乡市| 白水县| 呼和浩特市| 牟定县| 沁水县| 新蔡县| 观塘区| 江都市| 布拖县| 泉州市| 荔浦县| 安西县| 东海县| 望城县| 赫章县|