python (win32com) 批量刪除 word (docx, doc) 中所有頁首、頁尾 (Word.Application, Word.Basic)
阿新 • • 發佈:2021-02-20
技術標籤:python自動化辦公pythonwindows辦公軟體doc批量替換
之前看網上的資料,大部分都是用 python-docx
庫來刪除 word 文件的頁首、頁尾:
header.is_linked_to_previous = True
但是實際使用下來,問題不少,也不能保證所有頁面(尤其是第一頁)的頁首、頁尾都被有效清除。
於是我想使用 win32com
,但網上的資料實在太少。經過一番探索,我得出了下面的方法:
首先安裝:
pip install pypiwin32
編寫 python 程式碼:
import os
from win32com import client
# 用來進行 word 文件的開啟、儲存、關閉操作
word = client.DispatchEx("Word.Application")
# 刪除頁首、頁尾的核心
wb = client.DispatchEx("Word.Basic")
def removeHeaderFooter(file):
'''
Para: file: word文件路徑,需要包括檔名、拓展名
'''
# 開啟文件,注意引數要是絕對路徑,可以使用 os 庫的方法進行轉化
wordDoc = word.Documents.Open(os.path.abspath(file), ReadOnly=0)
# 呼叫 Word.Basic 來進行操作
# 注意後面沒有表示函式的括號
wb.RemoveHeader
wb.RemoveFooter
# 儲存檔案,此外還可以為 SaveAs 函式增加 FileFormat=17 引數來儲存為 pdf 檔案(拓展名需要更改一下)
wordDoc.SaveAs(os.path.abspath(file))
# 注意,一定要關閉檔案,因此建議將上面內容用 try 包起來,確保檔案關閉
# 如果沒有正確關閉,則下次無法正常開啟
# 如有意外,可以將工作管理員中的 WINWORD 程序關閉,並將資料夾內的隱藏檔案 ~$... .docx 刪掉(可能是隱藏的)
wordDoc.Close()
if __name__ == '__main__':
removeHeaderFooter('test.docx')
如果需要遍歷資料夾內所有 word 檔案:
# 遍歷資料夾
for name in os.listdir(path):
# 判斷是檔案,且是 word 檔案
if os.path.isfile(os.path.join(path, name)) and name.split('.')[-1].lower() in ['doc', 'docx']:
print(f'{name}:removing header and footer...')
removeHeaderFooter(os.path.join(path, name))
本文原創,轉載請註明:https://blog.csdn.net/swkfk/article/details/113856618