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

Python實(shí)現(xiàn)Word文檔自動(dòng)化的操作大全(批量生成、模板填充與內(nèi)容修改)

 更新時(shí)間:2025年11月13日 10:39:18   作者:愛(ài)分享的飄哥  
在職場(chǎng)中,Word文檔是公認(rèn)的好伙伴,但你有沒(méi)有被它折磨過(guò)?批量生成合同、制作報(bào)告以及發(fā)放證書(shū)/通知等等,這些重復(fù)、低效的文檔制作和排版耗時(shí)問(wèn)題,嚴(yán)重拖慢了你的辦公自動(dòng)化進(jìn)程今天,我將帶你進(jìn)入Python操作Word的奇妙世界,需要的朋友可以參考下

重復(fù)性文檔制作,手動(dòng)填充模板,效率低下還易錯(cuò)

在職場(chǎng)中,Word文檔是公認(rèn)的“好伙伴”,但你有沒(méi)有被它“折磨”過(guò)?

批量生成合同: 每月幾十份合同,內(nèi)容大同小異,卻要手動(dòng)修改日期、客戶名、金額,重復(fù)勞動(dòng)讓人抓狂。

制作報(bào)告: 不同的季度報(bào)告,框架一樣,數(shù)據(jù)更新,但排版、圖表插入每次都要從頭來(lái)過(guò)。
發(fā)放證書(shū)/通知: 幾百份個(gè)性化證書(shū),只改個(gè)姓名、編號(hào),卻要手動(dòng)復(fù)制粘貼幾百次,效率低下還易錯(cuò)!

這些重復(fù)、低效的文檔制作和排版耗時(shí)問(wèn)題,嚴(yán)重拖慢了你的辦公自動(dòng)化進(jìn)程。

今天,我將帶你進(jìn)入Python操作Word的奇妙世界!我們將手把手教你如何利用python-docx庫(kù),輕松實(shí)現(xiàn):

Word文檔批量生成: 數(shù)據(jù)驅(qū)動(dòng),自動(dòng)生成海量個(gè)性化文檔。

智能模板填充: 告別手動(dòng)復(fù)制粘貼,精準(zhǔn)填充文本、圖片。

內(nèi)容修改與排版優(yōu)化: 批量替換文本、調(diào)整格式,讓文檔瞬間專業(yè)!

1.python-docx入門(mén):Word文檔的“瑞士軍刀”!

要實(shí)現(xiàn)Python操作Word,我們離不開(kāi)強(qiáng)大的python-docx庫(kù)。它是Python中專門(mén)用于創(chuàng)建、修改和讀取.docx格式Word文檔的庫(kù)。

作用: python-docx將Word文檔視為一個(gè)包含“文檔”、“段落”、等元素的層次結(jié)構(gòu)。通過(guò)操作這些元素,你可以精確控制文檔的每一個(gè)部分。

安裝python-docx:

pip install python-docx

1.1 安裝與基礎(chǔ)概念:文檔、段落、運(yùn)行、表格

我們先了解python-docx中的幾個(gè)核心概念:

Document (文檔): 整個(gè)Word文件,是最高層級(jí)的對(duì)象。

Paragraph (段落): Word文檔中的一個(gè)文本塊,由一個(gè)或多個(gè)“運(yùn)行”組成。

Run (運(yùn)行): 段落中具有相同樣式(如字體、顏色、加粗)的連續(xù)文本。通常,一個(gè)段落內(nèi)部的樣式變化會(huì)導(dǎo)致新的“運(yùn)行”的生成。

Table (表格): Word文檔中的表格對(duì)象,可以訪問(wèn)行、列和單元格。

1.2 打開(kāi)/創(chuàng)建Word文檔:Python與Word的初次接觸

場(chǎng)景: 你想用Python創(chuàng)建一個(gè)新的Word文檔,或者打開(kāi)一個(gè)已有的文檔進(jìn)行修改。

方案: python-docx提供了簡(jiǎn)單的方法來(lái)創(chuàng)建空文檔或加載現(xiàn)有文檔。

代碼:

from docx import Document # 導(dǎo)入Document類
import os

def create_or_open_word_doc(file_path, mode="new"):
    """
    創(chuàng)建或打開(kāi)Word文檔。
    這是Python操作Word的基礎(chǔ)。
    :param file_path: Word文檔路徑
    :param mode: "new" (創(chuàng)建新文檔) 或 "open" (打開(kāi)現(xiàn)有文檔)
    :return: Document對(duì)象
    """
    os.makedirs(os.path.dirname(file_path), exist_ok=True) # 確保目錄存在

    doc = None
    try:
        if mode == "new":
            doc = Document() # 創(chuàng)建一個(gè)空文檔
            print(f"? 成功創(chuàng)建新Word文檔對(duì)象。")
        elif mode == "open":
            if not os.path.exists(file_path):
                print(f"? 文件不存在,無(wú)法打開(kāi):{file_path}")
                return None
            doc = Document(file_path) # 打開(kāi)現(xiàn)有文檔
            print(f"? 成功打開(kāi)Word文檔:{file_path}")
            # 打印文檔中的段落數(shù)量
            print(f"   文檔包含 {len(doc.paragraphs)} 個(gè)段落。")
        else:
            print("?? 無(wú)效的模式。")
            return None
        
        return doc
    except Exception as e:
        print(f"? 處理Word文檔失敗:{e}")
        return None

if __name__ == "__main__":
    new_doc_path = os.path.expanduser("~/Desktop/new_empty_doc.docx")
    existing_doc_path = os.path.expanduser("~/Desktop/existing_sample_doc.docx")

    # 創(chuàng)建一個(gè)示例現(xiàn)有文檔用于測(cè)試
    if not os.path.exists(existing_doc_path):
        doc = Document()
        doc.add_paragraph("這是一個(gè)用于測(cè)試的現(xiàn)有文檔。")
        doc.save(existing_doc_path)

    # 示例1:創(chuàng)建新文檔
    new_doc = create_or_open_word_doc(new_doc_path, mode="new")
    if new_doc:
        new_doc.add_paragraph("這是Python創(chuàng)建的第一個(gè)段落。")
        new_doc.save(new_doc_path)
        print(f"新文檔已保存到:{new_doc_path}")

    # 示例2:打開(kāi)現(xiàn)有文檔
    opened_doc = create_or_open_word_doc(existing_doc_path, mode="open")
    if opened_doc:
        # 可以對(duì) opened_doc 進(jìn)行后續(xù)操作
        pass

步驟:

準(zhǔn)備環(huán)境: pip install python-docx。

修改代碼路徑: 復(fù)制上方代碼到VS Code,保存為docx_basic.py。修改 new_doc_path 和 existing_doc_path。

運(yùn)行: 運(yùn)行 python docx_basic.py。

效果展示:

1.3 讀寫(xiě)文本內(nèi)容:讓Python填寫(xiě)Word

場(chǎng)景: 你需要從Word文檔中提取文本內(nèi)容進(jìn)行分析,或者向Word文檔中插入新的文字、段落。

方案: python-docx能讓你像操作字符串一樣,方便地讀寫(xiě)Word文檔中的文本內(nèi)容,實(shí)現(xiàn)文檔批量修改。
代碼:

from docx import Document
from docx.shared import Inches # 用于設(shè)置圖片大小
import os

def read_write_text_to_word(file_path):
    """
    讀取和寫(xiě)入Word文檔中的文本內(nèi)容。
    這是Word自動(dòng)化和文檔管理的基礎(chǔ)。
    :param file_path: Word文檔路徑
    """
    os.makedirs(os.path.dirname(file_path), exist_ok=True)

    try:
        # 創(chuàng)建一個(gè)新文檔用于演示
        doc = Document()
        doc.add_heading('Python自動(dòng)化文檔示例', level=1) # 添加一級(jí)標(biāo)題

        # 寫(xiě)入段落
        doc.add_paragraph('這是第一段內(nèi)容。')
        doc.add_paragraph('這是第二段,')
        doc.paragraphs[1].add_run('包含加粗文本。').bold = True # 給第二個(gè)段落添加加粗文本

        # 寫(xiě)入列表
        doc.add_paragraph('這是一個(gè)列表:')
        doc.add_paragraph('項(xiàng)目1', style='List Bullet') # 添加項(xiàng)目符號(hào)列表
        doc.add_paragraph('項(xiàng)目2', style='List Bullet')

        # 寫(xiě)入表格
        table = doc.add_table(rows=1, cols=3)
        table.style = 'Table Grid' # 設(shè)置表格樣式
        hdr_cells = table.rows[0].cells
        hdr_cells[0].text = '姓名'
        hdr_cells[1].text = '年齡'
        hdr_cells[2].text = '城市'

        data = [
            ('Alice', 30, 'New York'),
            ('Bob', 25, 'Los Angeles')
        ]
        for name, age, city in data:
            row_cells = table.add_row().cells
            row_cells[0].text = name
            row_cells[1].text = str(age)
            row_cells[2].text = city

        # 插入圖片 (需要準(zhǔn)備一張圖片文件)
        # test_image_path = os.path.expanduser("~/Desktop/sample_image.png")
        # if os.path.exists(test_image_path):
        #     doc.add_picture(test_image_path, width=Inches(1.25)) # 插入圖片并設(shè)置寬度
        #     print(f"   ? 圖片 '{os.path.basename(test_image_path)}' 已插入。")


        doc.save(file_path)
        print(f"? Word文檔內(nèi)容已成功寫(xiě)入并保存到:'{file_path}'")
        
        # --- 讀取文檔內(nèi)容 ---
        print(f"\n?? 正在讀取文檔:'{os.path.basename(file_path)}' 中的文本內(nèi)容...")
        loaded_doc = Document(file_path)
        full_text = []
        for para in loaded_doc.paragraphs:
            full_text.append(para.text)
        print("   --- 文檔內(nèi)容概覽 ---")
        print("\n".join(full_text[:5])) # 打印前5個(gè)段落
        print("? 文檔內(nèi)容讀取完成!")

    except Exception as e:
        print(f"? 讀寫(xiě)Word文檔失?。簕e}")

if __name__ == "__main__":
    output_word_path = os.path.expanduser("~/Desktop/automated_report_content.docx")
    read_write_text_to_word(output_word_path)

步驟:

準(zhǔn)備環(huán)境: pip install python-docx。

修改代碼路徑: 復(fù)制上方代碼到VS Code,保存為docx_read_write.py。修改 output_word_path。

運(yùn)行: 運(yùn)行 python docx_read_write.py。

效果展示:

2.Python批量生成個(gè)性化Word文檔

這是Word自動(dòng)化最核心的應(yīng)用之一!批量生成文檔如合同、報(bào)告、證書(shū)等,通過(guò)模板填充實(shí)現(xiàn)個(gè)性化,徹底告別手動(dòng)復(fù)制粘貼!

作用: 預(yù)先設(shè)計(jì)好包含“占位符”的Word模板文件,Python腳本讀取外部數(shù)據(jù)(如Excel),然后用真實(shí)數(shù)據(jù)替換模板中的占位符,生成新的文檔。

2.1 設(shè)計(jì)Word模板:word自動(dòng)化開(kāi)始

場(chǎng)景: 你有100份需要發(fā)給不同客戶的合同,其中只有“客戶名稱”、“合同金額”、“日期”等少數(shù)信息不同。
方案: 在Word中創(chuàng)建帶有特殊標(biāo)記(如{{客戶名稱}})的文本,作為Python識(shí)別和替換的占位符。

模板:

這是一份重要的合同

合同編號(hào):{{合同編號(hào)}}

甲方:{{甲方名稱}}

乙方:{{乙方名稱}}

簽訂日期:{{簽訂日期}}

合同金額:人民幣 {{合同金額}} 元整

… (其他合同條款) …

請(qǐng)雙方簽字確認(rèn)。

2.2 讀取數(shù)據(jù)與智能填充:數(shù)據(jù)

場(chǎng)景: 你有100個(gè)客戶的合同數(shù)據(jù)存在Excel里,需要自動(dòng)生成100份定制化的合同。

方案: Python腳本(通常結(jié)合Pandas讀取Excel)能讀取這些數(shù)據(jù),然后遍歷數(shù)據(jù),逐個(gè)生成個(gè)性化文檔。

代碼:

pip install xlrd
from docx import Document
import pandas as pd
import os

def generate_docs_from_template(template_path, data_excel_path, output_folder):
    """
    根據(jù)Word模板和Excel數(shù)據(jù),批量生成個(gè)性化Word文檔。
    這是Python批量生成文檔和模板填充的核心功能。
    :param template_path: Word模板文件路徑 (含占位符,如{{姓名}})
    :param data_excel_path: 包含數(shù)據(jù)的Excel文件路徑
    :param output_folder: 生成文檔的輸出文件夾
    """
    if not os.path.exists(template_path): return print(f"? 模板文件不存在:{template_path}")
    if not os.path.exists(data_excel_path): return print(f"? 數(shù)據(jù)文件不存在:{data_excel_path}")
    
    os.makedirs(output_folder, exist_ok=True)

    try:
        df = pd.read_excel(data_excel_path) # 讀取Excel數(shù)據(jù)
        print(f"?? 正在根據(jù)模板 '{os.path.basename(template_path)}' 和數(shù)據(jù) '{os.path.basename(data_excel_path)}' 批量生成文檔...")

        generated_count = 0
        for index, row in df.iterrows(): # 遍歷Excel的每一行數(shù)據(jù)
            doc = Document(template_path) # 每次循環(huán)重新加載模板,確保是干凈的模板

            # 遍歷文檔中的所有段落,替換占位符
            for paragraph in doc.paragraphs:
                for key, value in row.items(): # 遍歷當(dāng)前行的數(shù)據(jù)(列名:值)
                    placeholder = f"{{{{{key}}}}}" # 構(gòu)建占位符字符串,如 {{姓名}}
                    if placeholder in paragraph.text:
                        paragraph.text = paragraph.text.replace(placeholder, str(value))
            
            # 遍歷表格中的單元格,替換占位符(如果模板中包含表格)
            for table in doc.tables:
                for row_table in table.rows:
                    for cell in row_table.cells:
                        for key, value in row.items():
                            placeholder = f"{{{{{key}}}}}"
                            if placeholder in cell.text:
                                cell.text = cell.text.replace(placeholder, str(value))

            # 構(gòu)建輸出文件名 (例如:合同_客戶名稱.docx)
            output_filename = f"合同_{row['乙方名稱']}_{row['簽訂日期']}.docx" # 假設(shè)Excel有“乙方名稱”和“簽訂日期”列
            output_full_path = os.path.join(output_folder, output_filename)
            
            doc.save(output_full_path)
            print(f"   ? 已生成:'{output_filename}'")
            generated_count += 1
        
        print(f"? 批量文檔生成完成!共生成 {generated_count} 份文檔。")
    except Exception as e:
        print(f"? 批量生成文檔失?。簕e}")

if __name__ == "__main__":
    template_doc = os.path.expanduser("~/Desktop/contract_template.docx")
    data_excel = os.path.expanduser("~/Desktop/contract_data.xlsx")
    output_docs_folder = os.path.expanduser("~/Desktop/生成的合同")
    
    # 確保模板文件存在
    if not os.path.exists(template_doc):
        # 簡(jiǎn)單創(chuàng)建模擬模板 (用戶需手動(dòng)創(chuàng)建帶有占位符的docx)
        doc = Document(); doc.add_paragraph("合同編號(hào):{{合同編號(hào)}}"); doc.add_paragraph("甲方:{{甲方名稱}}"); doc.save(template_doc)
        print(f"臨時(shí)模板文件 '{os.path.basename(template_doc)}' 已創(chuàng)建。請(qǐng)手動(dòng)在其中添加占位符。")

    # 確保數(shù)據(jù)Excel存在
    if not os.path.exists(data_excel):
        pd.DataFrame({'合同編號(hào)': ['C001', 'C002'], 
                      '甲方名稱': ['A公司', 'B公司'], 
                      '乙方名稱': ['張三', '李四'], 
                      '簽訂日期': ['2025-01-01', '2025-02-01'], 
                      '合同金額': [10000, 15000]}).to_excel(data_excel, index=False)
        print(f"臨時(shí)數(shù)據(jù)文件 '{os.path.basename(data_excel)}' 已創(chuàng)建。")

    generate_docs_from_template(template_doc, data_excel, output_docs_folder)

步驟:

準(zhǔn)備模板: 創(chuàng)建一個(gè)contract_template.docx文件,按照示例添加{{占位符}}。

準(zhǔn)備數(shù)據(jù): 創(chuàng)建一個(gè)contract_data.xlsx文件,包含與占位符對(duì)應(yīng)的列數(shù)據(jù)。

修改代碼路徑: 修改 template_doc、data_excel、output_docs_folder。

運(yùn)行: 運(yùn)行 python generate_docs.py。

效果:

2.3 圖片與圖表的自動(dòng)插入:讓文檔圖文并茂

場(chǎng)景: 你的報(bào)告需要插入多張圖片或由Python生成的圖表,手動(dòng)調(diào)整大小和位置非常耗時(shí)。

方案: python-docx支持圖片和圖表的自動(dòng)插入,并能控制其大小,讓你的報(bào)告瞬間變得圖文并茂、專業(yè)美觀!

代碼:

from docx import Document
from docx.shared import Inches # 用于設(shè)置圖片大小
import os
import matplotlib.pyplot as plt # 用于生成圖表圖片

def insert_image_to_word_doc(file_path, image_path, width_inches=4):
    """
    向Word文檔中插入圖片。
    :param file_path: Word文檔路徑
    :param image_path: 要插入的圖片路徑
    :param width_inches: 圖片在文檔中的寬度(英寸)
    """
    if not os.path.exists(image_path): return print(f"? 圖片文件不存在:{image_path}")
    os.makedirs(os.path.dirname(file_path), exist_ok=True)

    try:
        # 創(chuàng)建或打開(kāi)文檔
        doc = Document() # 創(chuàng)建新文檔,或者 load_document(file_path)
        doc.add_heading('產(chǎn)品銷(xiāo)售數(shù)據(jù)圖', level=1)
        doc.add_paragraph('以下是2023年各產(chǎn)品銷(xiāo)售額對(duì)比圖:')
        
        # **核心操作:插入圖片**
        doc.add_picture(image_path, width=Inches(width_inches)) # 插入圖片并設(shè)置寬度
        
        doc.add_paragraph('數(shù)據(jù)分析結(jié)論:...')
        doc.save(file_path)
        print(f"? 圖片 '{os.path.basename(image_path)}' 已成功插入到Word文檔:'{file_path}'")
    except Exception as e:
        print(f"? 插入圖片到Word文檔失敗:{e}")

if __name__ == "__main__":
    output_word_path = os.path.expanduser("~/Desktop/report_with_image.docx")
    # 準(zhǔn)備一張圖片文件(例如通過(guò)matplotlib生成或普通圖片)
    chart_image_path = os.path.expanduser("~/Desktop/sample_chart_for_word.png")

    # 簡(jiǎn)單創(chuàng)建模擬圖表圖片
    if not os.path.exists(chart_image_path):
        plt.figure(figsize=(6, 4)); plt.bar(['Jan','Feb'],[100,120]); plt.title('Monthly Sales'); plt.savefig(chart_image_path); plt.close()
        print(f"臨時(shí)圖表文件 '{os.path.basename(chart_image_path)}' 已創(chuàng)建。")

    insert_image_to_word_doc(output_word_path, chart_image_path, width_inches=5)

步驟:

準(zhǔn)備環(huán)境: pip install python-docx matplotlib。

準(zhǔn)備圖片: 準(zhǔn)備一張圖片文件(如sample_chart_for_word.png),最好是圖表圖片。

修改代碼路徑: 修改 output_word_path 和 chart_image_path。

運(yùn)行: 運(yùn)行 python docx_insert_image.py。

效果展示:

3.Python實(shí)現(xiàn)批量替換、格式調(diào)整!

僅僅生成和填充還不夠,Word自動(dòng)化的真正威力在于對(duì)文檔內(nèi)容的靈活修改和自動(dòng)化排版,徹底告別繁瑣排版!

作用: python-docx允許你遍歷文檔的段落和運(yùn)行(Run),查找并替換文本,以及直接修改文本的字體、顏色、大小、對(duì)齊方式。

3.1 批量替換內(nèi)容:告別Ctrl+H,一鍵修改文檔

場(chǎng)景: 公司名稱變更,你需要修改幾十份舊合同中的公司名稱;或者一個(gè)報(bào)告中多次出現(xiàn)的某個(gè)關(guān)鍵詞需要批量更新。手動(dòng)Ctrl+H查找替換,效率低下且容易遺漏。

方案: Python腳本可以打開(kāi)Word文檔,遍歷所有段落,并對(duì)其中的文本進(jìn)行批量替換,效率遠(yuǎn)超手動(dòng)操作!

代碼:

from docx import Document
import os
from docx.text.run import Run # 導(dǎo)入Run類,用于更細(xì)致的文本操作
from docx.enum.text import WD_ALIGN_PARAGRAPH # 可能會(huì)用到,為了樣式操作
import shutil # 用于文件操作,如復(fù)制文件

def _replace_text_in_run(run: Run, old_text: str, new_text: str):
    """
    替換單個(gè)Run中的文本,并返回是否發(fā)生了替換。
    盡量保留原有Run的格式。
    """
    if old_text not in run.text:
        return False
    
    # 替換Run的文本,并嘗試保留格式
    # 這是一種簡(jiǎn)單粗暴的替換,可能會(huì)丟失復(fù)雜格式,但對(duì)大多數(shù)情況有效
    # 更高級(jí)的替換需要?jiǎng)h除舊Run,創(chuàng)建新Run并逐個(gè)復(fù)制格式屬性
    run.text = run.text.replace(old_text, new_text)
    return True

def _replace_text_in_paragraph_robust(paragraph, replacements):
    """
    魯棒地替換段落中的文本,處理跨Run的情況。
    """
    original_text = paragraph.text # 獲取段落的完整文本
    found_and_replaced = False

    for old_text, new_text in replacements.items():
        if old_text in original_text: # 如果段落的完整文本中包含要替換的字符串
            # 標(biāo)記需要替換,即使現(xiàn)在不立即替換Run
            found_and_replaced = True 
            # 這是一個(gè)簡(jiǎn)化的處理策略:先刪除所有舊的Run,再添加一個(gè)新Run來(lái)替換
            # 這種方法會(huì)丟失段落內(nèi)部的格式(如粗體、斜體),但能保證替換的準(zhǔn)確性
            # 如果需要保留格式,實(shí)現(xiàn)會(huì)非常復(fù)雜,涉及掃描和拆分Run
            
            # 簡(jiǎn)單策略:如果找到匹配,清空段落所有runs,然后寫(xiě)入新的文本
            # 這種方法會(huì)丟失原段落內(nèi)所有格式,但最簡(jiǎn)單有效
            paragraph.clear() # 清空段落所有內(nèi)容
            new_run = paragraph.add_run(original_text.replace(old_text, new_text))
            
            # TODO: 復(fù)制舊Run的格式到新Run,這里僅做示意,實(shí)際需要更復(fù)雜的邏輯
            # for r in original_runs:
            #   new_run.bold = r.bold
            #   new_run.italic = r.italic
            #   new_run.font.size = r.font.size
            #   ...等等所有格式屬性

            print(f"   ? 替換:'{old_text}' -> '{new_text}' 在段落中。")
            # 更新 original_text 以便處理同一段落內(nèi)的多個(gè)替換
            original_text = original_text.replace(old_text, new_text)
    return found_and_replaced

def batch_replace_text_in_doc(file_path, replacements):
    """
    批量替換Word文檔中的文本內(nèi)容。
    這是文檔批量修改的核心功能,告別手動(dòng)Ctrl+H。
    :param file_path: Word文檔路徑
    :param replacements: 替換字典,格式為 {舊文本: 新文本}
    """
    if not os.path.exists(file_path): return print(f"? Word文件不存在:{file_path}")
    
    # 構(gòu)建輸出路徑,避免覆蓋原文件
    output_path = os.path.join(os.path.dirname(file_path), "modified_" + os.path.basename(file_path))
    temp_doc_path = os.path.join(os.path.dirname(file_path), "temp_" + os.path.basename(file_path))


    try:
        # 先將原始文檔復(fù)制一份進(jìn)行操作,避免直接修改源文件
        shutil.copyfile(file_path, temp_doc_path)
        doc = Document(temp_doc_path) # 打開(kāi)臨時(shí)文檔進(jìn)行修改
        
        print(f"?? 正在批量替換 '{os.path.basename(file_path)}' 中的文本...")
        replaced_count = 0

        # 遍歷文檔中的所有段落
        for paragraph in doc.paragraphs:
            if _replace_text_in_paragraph_robust(paragraph, replacements):
                replaced_count += 1
        
        # 遍歷表格中的單元格 (如果文檔中包含表格)
        for table in doc.tables:
            for row in table.rows:
                for cell in row.cells:
                    for paragraph_in_cell in cell.paragraphs: # 單元格內(nèi)也可能有多個(gè)段落
                        if _replace_text_in_paragraph_robust(paragraph_in_cell, replacements):
                            replaced_count += 1
        
        doc.save(output_path)
        print(f"? 批量文本替換完成!共進(jìn)行 {replaced_count} 處替換。修改后的文檔已保存到:'{output_path}'")
    except Exception as e:
        print(f"? 批量文本替換失?。簕e}")
    finally:
        # 清理臨時(shí)文件
        if os.path.exists(temp_doc_path):
            os.remove(temp_doc_path)

if __name__ == "__main__":
    # 準(zhǔn)備一個(gè)包含要替換內(nèi)容的Word文檔
    test_doc_path = os.path.expanduser("D://study//company_report_v11.docx")
    
    # 簡(jiǎn)單創(chuàng)建模擬文檔 (確保有多個(gè)包含關(guān)鍵字的段落和表格)
    if not os.path.exists(test_doc_path):
        doc = Document()
        doc.add_heading("年度運(yùn)營(yíng)報(bào)告 - 【繁星娛樂(lè)】", level=1)
        doc.add_paragraph("本報(bào)告由【繁星娛樂(lè)】撰寫(xiě),版本為v1.0。")
        doc.add_paragraph("請(qǐng)【繁星娛樂(lè)】的所有員工注意。")
        
        # 添加一個(gè)表格
        table = doc.add_table(rows=2, cols=2)
        table.cell(0, 0).text = "部門(mén)"
        table.cell(0, 1).text = "負(fù)責(zé)人"
        table.cell(1, 0).text = "銷(xiāo)售部"
        table.cell(1, 1).text = "【繁星娛樂(lè)】代表"
        
        doc.save(test_doc_path)
        print(f"臨時(shí)測(cè)試文檔 '{os.path.basename(test_doc_path)}' 已創(chuàng)建。")

    replacements_dict = {
        "【繁星娛樂(lè)】": "【11111111】",
        "v1.0": "v2.0"
    }
    
    batch_replace_text_in_doc(test_doc_path, replacements_dict)
步驟:
準(zhǔn)備Word文檔: 在桌面創(chuàng)建一個(gè)company_report_v1.docx,其中包含一些需要替換的文本。
修改代碼路徑和替換字典: 修改 test_doc_path 和 replacements_dict。

運(yùn)行: 運(yùn)行 python docx_batch_replace.py。

效果展示:

3.2 字體、顏色、大小與對(duì)齊:自動(dòng)化專業(yè)排版

場(chǎng)景: 你需要為報(bào)告中的某個(gè)標(biāo)題加粗、設(shè)為紅色,某個(gè)段落調(diào)整字體大小和對(duì)齊方式。手動(dòng)逐個(gè)設(shè)置,耗時(shí)且難以保持一致性。

方案: python-docx可以精確控制文本的字體、大小、顏色、粗斜體,以及段落的對(duì)齊方式,實(shí)現(xiàn)文檔排版自動(dòng)化。

代碼:

from docx import Document
from docx.shared import Pt, RGBColor # Pt用于磅數(shù),RGBColor用于顏色
from docx.enum.text import WD_ALIGN_PARAGRAPH # 用于段落對(duì)齊
import os

def auto_format_word_doc(file_path):
    """
    自動(dòng)化設(shè)置Word文檔的字體、顏色、大小與對(duì)齊方式。
    這是文檔排版自動(dòng)化和Python操作Word的高級(jí)功能。
    :param file_path: Word文檔路徑
    """
    os.makedirs(os.path.dirname(file_path), exist_ok=True)

    try:
        # 創(chuàng)建新文檔用于演示
        doc = Document()
        
        # 1. 添加標(biāo)題并設(shè)置樣式
        heading = doc.add_heading('Python自動(dòng)化排版報(bào)告', level=1)
        # 訪問(wèn)標(biāo)題的run,設(shè)置字體大小和加粗
        heading.runs[0].font.size = Pt(24) # 24磅
        heading.runs[0].font.bold = True
        heading.runs[0].font.color.rgb = RGBColor(0x42, 0x24, 0xE9) # 藍(lán)色

        # 2. 添加段落并設(shè)置樣式
        paragraph1 = doc.add_paragraph('這是一段重要的摘要內(nèi)容。')
        paragraph1.runs[0].font.name = 'Arial' # 設(shè)置字體
        paragraph1.runs[0].font.size = Pt(12)
        paragraph1.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY # 兩端對(duì)齊

        paragraph2 = doc.add_paragraph('本段內(nèi)容將居中顯示,并設(shè)置為斜體。')
        paragraph2.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中對(duì)齊
        paragraph2.runs[0].font.italic = True # 斜體

        doc.save(file_path)
        print(f"? Word文檔排版已成功設(shè)置并保存到:'{file_path}'")
    except Exception as e:
        print(f"? Word文檔排版失?。簕e}")

if __name__ == "__main__":
    output_word_path = os.path.expanduser("~/Desktop/automated_formatted_doc.docx")
    auto_format_word_doc(output_word_path)

步驟:

準(zhǔn)備環(huán)境: pip install python-docx。

修改代碼路徑: 修改 output_word_path。

運(yùn)行: 運(yùn)行 python docx_auto_format.py。

效果展示:

4.Word文檔工廠

恭喜你!通過(guò)本篇文章,你已經(jīng)掌握了Word文檔自動(dòng)化的各項(xiàng)核心魔法,親手打造了一個(gè)能夠批量生成、模板填充、內(nèi)容修改的* Word文檔工廠”

們深入學(xué)習(xí)了python-docx庫(kù),它堪稱Word文檔的**“瑞士軍刀”**,實(shí)現(xiàn)了:

Word文檔批量生成: 結(jié)合數(shù)據(jù),一鍵生成海量個(gè)性化文檔,告別重復(fù)性文檔制作。

智能模板填充: 利用占位符,精準(zhǔn)將數(shù)據(jù)填充到Word模板,杜絕手動(dòng)填充模板的低效。

文檔內(nèi)容修改與排版優(yōu)化: 批量替換文本,自動(dòng)化設(shè)置字體、顏色、大小、對(duì)齊方式,徹底告別繁瑣排版。

5.Word自動(dòng)化,開(kāi)啟智能文檔管理新時(shí)代!

通過(guò)本篇文章,你已經(jīng)掌握了Word文檔自動(dòng)化的強(qiáng)大能力,為你的辦公自動(dòng)化之旅又增添了一個(gè)重量級(jí)技能!你學(xué)會(huì)了如何利用Python的python-docx庫(kù),高效地進(jìn)行Word文檔的創(chuàng)建、填充、修改與排版。

除了今天學(xué)到的Word自動(dòng)化功能,你還希望Python能幫你實(shí)現(xiàn)哪些更復(fù)雜的文檔處理需求?比如:自動(dòng)提取Word文檔中的特定信息?將Word文檔內(nèi)容智能生成摘要?在評(píng)論區(qū)分享你的需求和想法,你的建議可能會(huì)成為我們未來(lái)文章的靈感來(lái)源!

以上就是Python實(shí)現(xiàn)Word文檔自動(dòng)化的操作大全(批量生成、模板填充與內(nèi)容修改)的詳細(xì)內(nèi)容,更多關(guān)于Python Word文檔自動(dòng)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n

    python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n

    這篇文章主要介紹了python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用tkinter實(shí)現(xiàn)三子棋游戲

    使用tkinter實(shí)現(xiàn)三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了使用tkinter實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Python中openpyxl和pandas的使用示例詳解

    Python中openpyxl和pandas的使用示例詳解

    本文將深入探討這兩個(gè)庫(kù)的使用方法,從基礎(chǔ)操作到高級(jí)技巧,幫助讀者全面掌握Python處理Excel文件的能力,我們將通過(guò)大量實(shí)際示例展示如何結(jié)合使用這兩個(gè)庫(kù)來(lái)完成各種復(fù)雜的Excel處理任務(wù),感興趣的朋友一起看看吧
    2025-06-06
  • Python中Iterator迭代器的使用雜談

    Python中Iterator迭代器的使用雜談

    Python中的迭代器意義不僅是在iter函數(shù)上的運(yùn)用,更是一種處理可迭代對(duì)象的迭代器模式,這里我們來(lái)簡(jiǎn)單聊聊Python中Iterator迭代器的使用雜談:
    2016-06-06
  • Python中numpy模塊常見(jiàn)用法demo實(shí)例小結(jié)

    Python中numpy模塊常見(jiàn)用法demo實(shí)例小結(jié)

    這篇文章主要介紹了Python中numpy模塊常見(jiàn)用法,結(jié)合實(shí)例形式總結(jié)分析了numpy常見(jiàn)的運(yùn)算操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • 如何用python多次調(diào)用exe文件運(yùn)行不同的結(jié)果

    如何用python多次調(diào)用exe文件運(yùn)行不同的結(jié)果

    有個(gè)C++項(xiàng)目是讀取配置參數(shù)文件并打印對(duì)應(yīng)的結(jié)果,后來(lái)需要多次修改配置文件并運(yùn)行,于是想到寫(xiě)個(gè)python腳本執(zhí)行這一過(guò)程,今天通過(guò)本文給大家分享python多次調(diào)用exe文件運(yùn)行不同的結(jié)果,感興趣的朋友一起看看吧
    2023-05-05
  • python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作

    python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作

    這篇文章主要介紹了python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 使用python創(chuàng)建Excel工作簿及工作表過(guò)程圖解

    使用python創(chuàng)建Excel工作簿及工作表過(guò)程圖解

    這篇文章主要介紹了使用python創(chuàng)建Excel工作簿及工作表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python機(jī)器學(xué)習(xí)之使用Pyecharts制作可視化大屏

    Python機(jī)器學(xué)習(xí)之使用Pyecharts制作可視化大屏

    pyecharts是一個(gè)用于生成Echarts圖表的Python庫(kù),Echarts是百度開(kāi)源的一個(gè)數(shù)據(jù)可視化 JS 庫(kù),可以生成一些非常酷炫的圖表,這篇文章主要給大家介紹了關(guān)于Python機(jī)器學(xué)習(xí)之Pyecharts制作可視化大屏的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python使用PyGame播放Midi和Mp3文件的方法

    python使用PyGame播放Midi和Mp3文件的方法

    這篇文章主要介紹了python使用PyGame播放Midi和Mp3文件的方法,涉及Python操作多媒體文件的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

平山县| 高青县| 怀宁县| 获嘉县| 吉林省| 观塘区| 济阳县| 石嘴山市| 新郑市| 宝丰县| 防城港市| 正镶白旗| 南安市| 肥西县| 绍兴县| 嘉兴市| 新龙县| 喜德县| 平远县| 洛宁县| 五常市| 辽源市| 吴桥县| 和政县| 天全县| 三门峡市| 正阳县| 化德县| 长海县| 西安市| 兴山县| 大安市| 通道| 多伦县| 金川县| 清流县| 高阳县| 卫辉市| 平陆县| 中江县| 台中市|