Python自動合併Word檔案同時新增分頁符的方法

瘋狂學習GIS發表於2023-02-22

  本文介紹基於Python,實現對多個Word文件加以自動合併,並在每次合併時按要求增添一個分頁符的方法。

  現有多個Word文件檔案,需將其按名稱順序合併為一個新的Word檔案,且需保證每一次合併時,都另起一頁(即新的Word檔案一頁中,不能出現兩個及以上的原本單個Word檔案的內容)。

  一般的,實現多個Word檔案的合併,在Word中可以透過“插入”→“文字”→“物件”的方式進行,較為方便。

  在彈出的視窗中選擇需要合併的Word檔案即可。

  但是,這種方法工作量較大,且無法滿足合併時另起一頁的要求。例如,如果原本有兩個Word檔案,每個檔案中都僅有一頁,一頁中僅在第一行有內容(這裡假設是一行數字),則合併後的新Word檔案同樣為一頁,該頁中包含兩行數字,即無法另起一頁合併。

  因此,本文就結合Pythonpython-docxdocx)模組與docxcompose模組,實現本文開頭提及的需求。

  首先安裝python-docx模組。由於我用的是Anaconda,因此就直接在Anaconda Prompt (Soft)中加以安裝。

  開啟Anaconda Prompt (Soft)

  在彈出的介面中輸入:

conda install -c conda-forge python-docx

  輸入y,開始安裝。

  隨後即可安裝完成。

  接下來安裝docxcompose,還是一樣的操作。輸入:

pip install docxcompose

  安裝完成後,即可開始程式碼的書寫。整體程式碼如下:

import os
from docx import Document
from docxcompose.composer import Composer

original_docx_path='F:/其他學生工作/2020就業聯絡員/2021.06派遣材料與調檔函/地信1701_就業派遣材料/'
new_docx_path='F:/其他學生工作/2020就業聯絡員/2021.06派遣材料與調檔函/地信1701.docx'

all_word=os.listdir(original_docx_path)
all_file_path=[]
for file_name in all_word:
    all_file_path.append(original_docx_path+file_name)
master=Document(all_file_path[0])
middle_new_docx=Composer(master)
num=0
for word in all_file_path:
    word_document=Document(word)
    word_document.add_page_break()
    if num!=0:
        middle_new_docx.append(word_document)
    num=num+1
middle_new_docx.save(new_docx_path)

  首先,對程式碼加以初步介紹。original_docx_path為存放需要合併的Word檔案路徑,new_docx_path為需要合併入其中的Word檔案,這裡大家直接在目標路徑下新建一個Word檔案並重新命名為需要的檔名即可。

  隨後,透過os.listdir獲取所有需要合併的Word檔案檔名。在這裡需要注意,如果需要按照檔名稱作為合併順序,大家直接在資源管理器中調整檔案排序方法為名稱即可。隨後透過.append()逐一將檔名稱與其路徑合併。

  接下來,設立一個Word檔案模板master。其實這個模板就是限定了合併完成後的新Word檔案的字型等格式,如果我們不設定模板,就會用docx模組中的預設模板,導致合併後的檔案字型與合併前的檔案字型不一致(內容是一致的,主要是字型等格式會出問題)。在這裡,為了保證合併完成後的新Word檔案的字型等格式與合併前檔案一致,直接用all_file_path[0](也就是即將要被合併的第一個檔案)作為模板即可。其次,將模板用Composer()啟用(這裡Composer函式個人認為就是啟用的作用),從而將其作為模板格式,對多個待合併的檔案加以約束。

  最後,由於需要保證每一次合併都另起一頁,便用.add_page_break()函式,在每一次合併前將這一待合併的檔案末尾增添分頁符。同時,由於我們用了第一個待合併檔案作為模板,因此後期只需要從第二個檔案開始進行合併即可(可以理解為,檔案一旦選擇為模板,其自動完成了自身的合併)。最後儲存檔案即可。

  綜上,便完成了“按名稱順序合併為一個新的Word檔案,且需保證每一次合併時,都另起一頁”的需求。但是需要注意,這一方法對於較為複雜的Word檔案(例如含有文字框等形式內容的檔案)不能實現合併,會報錯;對於含有普通文字、圖片等的Word檔案而言,還是很方便的~

相關文章