Python實(shí)現(xiàn)自動(dòng)化處理Word文檔的方法詳解
使用Python實(shí)現(xiàn)Word文檔的自動(dòng)化處理,包括批量生成Word文檔、在Word文檔中批量進(jìn)行查找和替換、將Word文檔批量轉(zhuǎn)換成PDF等。
1. 批量生成Word文檔
安裝openpyxl模塊
pip install openpyxl
安裝python-docx模塊
pip install python-docx
openpyxl模塊可以讀寫(xiě)擴(kuò)展名為.xlsx/.xlsm/.xltx/.xltm的Excel文件。
python-docx模塊可以讀寫(xiě)擴(kuò)展名為.docx的Word文檔,但不能處理擴(kuò)展名為.doc的Word文檔。
import re
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT, WD_TABLE_ALIGNMENT
from openpyxl import load_workbook
from docx import Document
def info_update(doc, old_info, new_info):
"""
文檔內(nèi)容替換
:param doc: Word模板文檔
:param old_info: 源文本
:param new_info: 新文本
:return:
"""
# 遍歷Word文檔中的所有段落
for para in doc.paragraphs:
# 遍歷每個(gè)段落中的run對(duì)象
for run in para.runs:
# 替換run對(duì)象的文本內(nèi)容
# run.text = run.text.replace(r'《'+old_info+'》', new_info)
run.text = run.text.replace(old_info, new_info)
run.text = re.sub(r'[《》]', '', run.text)
# 遍歷Word文檔中的所有表格
for table in doc.tables:
# 遍歷表格中的所有行
for row in table.rows:
# 遍歷行中的所有單元格
for cell in row.cells:
# 替換單元格內(nèi)容
cell.text = cell.text.replace('《' + old_info + '》', new_info)
# 設(shè)置表格中的內(nèi)容居中顯示
# 計(jì)算表格的rows和cols的長(zhǎng)度
rows = len(table.rows)
cols = len(table.columns)
# 循環(huán)將每一行,每一列都設(shè)置為居中
for r in range(rows):
for c in range(cols):
table.cell(r, c).vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中
table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中
wb = load_workbook('學(xué)生成績(jī)表.xlsx') # 打開(kāi)工作簿
ws = wb.active # 激活工作簿中的工作表
# 遍歷工作表的行,從第2行開(kāi)始
for row in range(2, ws.max_row + 1):
doc = Document('成績(jī)通知書(shū).docx') # 創(chuàng)建文檔對(duì)象
# 遍歷工作表的列
for col in range(1, ws.max_column + 1):
# 讀取當(dāng)前列的第一行,即列標(biāo)題,單元格的值轉(zhuǎn)換成字符串
old_info = str(ws.cell(row=1, column=col).value)
# 讀取當(dāng)前列的數(shù)據(jù),單元格的值需要轉(zhuǎn)換成字符串
new_info = str(ws.cell(row=row, column=col).value)
# 進(jìn)行內(nèi)容替換
info_update(doc, old_info, new_info)
student_name = str(ws.cell(row=row, column=1).value)
doc.save(f'scores\\成績(jī)單--致{student_name}.docx')
測(cè)試文件:


測(cè)試效果:


2. 將Word文檔批量轉(zhuǎn)換成PDF
安裝pywin32模塊
pip install pywin32
from pathlib import Path
from win32com.client import constants, gencache
# 創(chuàng)建Path對(duì)象
# 路徑要使用絕對(duì)路徑
src_folder = Path(r'E:\pythonProject\python辦公自動(dòng)化\第5章 自動(dòng)化處理Word文檔\scores')
output_folder = Path(r'E:\pythonProject\python辦公自動(dòng)化\第5章 自動(dòng)化處理Word文檔\PDF')
# 判斷輸出目錄是否存在
if not output_folder.exists():
# 不存在則創(chuàng)建
output_folder.mkdir(parents=True)
file_list = list(src_folder.glob('*[.docx|.doc]')) # 獲得要轉(zhuǎn)換的Word文檔的路徑列表
word = gencache.EnsureDispatch('Word.Application') # 創(chuàng)建Word程序?qū)ο?
# word = win32com.client.Dispatch('Word.Application')
for word_path in file_list:
# 生成轉(zhuǎn)換后的PDF文件的保存路徑
pdf_path = output_folder / word_path.with_suffix('.pdf').name # with_suffix()返回文件后綴已更改的新路徑
# 判斷pdf文件路徑是否已存在
if pdf_path.exists():
continue
else:
# 路徑需要是絕對(duì)路徑,否則會(huì)報(bào)錯(cuò)
doc = word.Documents.Open(str(word_path), ReadOnly=1) # 打開(kāi)Word文檔
# 設(shè)置導(dǎo)出格式為pdf
doc.ExportAsFixedFormat(str(pdf_path), constants.wdExportFormatPDF) # 將打開(kāi)的Word文檔另存為PDF文件,保存到給定的路徑
doc.Close() # 關(guān)閉Word文檔
word.Quit() # 關(guān)閉Word程序窗口
測(cè)試文件:

測(cè)試效果:

3. 在Word文檔中批量標(biāo)記關(guān)鍵詞
import win32com.client as win32
# 路徑要使用絕對(duì)路徑
input_file = r'E:\pythonProject\python辦公自動(dòng)化\第5章 自動(dòng)化處理Word文檔\勞動(dòng)合同.docx'
output_file = r'E:\pythonProject\python辦公自動(dòng)化\第5章 自動(dòng)化處理Word文檔\勞動(dòng)合同1.docx'
word = win32.gencache.EnsureDispatch('Word.Application') # 打開(kāi)一個(gè)Word程序窗口
word.Visible = False # 設(shè)置窗口為隱藏狀態(tài),即在后臺(tái)運(yùn)行
cs = win32.constants # 導(dǎo)入Word開(kāi)發(fā)接口提供的預(yù)設(shè)常量集合
doc = word.Documents.Open(input_file) # 打開(kāi)要處理的Word文檔
# 設(shè)置要標(biāo)記的關(guān)鍵詞列表
keyword_list = ['報(bào)酬', '保險(xiǎn)', '培訓(xùn)', '解除', '終止']
# 設(shè)置每個(gè)關(guān)鍵詞的突出顯示顏色
color_list = [cs.wdYellow, 14, cs.wdGreen, cs.wdRed, 13]
"""
值--顏色常量--含義:
1--wdBlack--黑色
2--wdBlue--藍(lán)色
3--wdTurquoise--青綠色
4--wdBrightGreen--鮮綠色
5--wdPink--粉紅色
6--wdRed--紅色
7--wdYellow--黃色
8--wdWhite--白色
9--wdDarkBlue--深藍(lán)色
10--wdTeal--青色
11--wdGreen--綠色
12--wdViolet--紫羅蘭色
13--wdDarkRed--深紅色
14--wdDarkYellow--深黃色
15--wdGray50--50%灰色
16--wdGray25--25%灰色
"""
for w, c in zip(keyword_list, color_list): # 使用zip()函數(shù)將關(guān)鍵詞列表和標(biāo)記顏色列表中的元素一一配對(duì)分別賦給w和c
word.Options.DefaultHighlightColorIndex = c # 設(shè)置突出顯示的顏色
findObj = word.Selection.Find # 創(chuàng)建Find對(duì)象
findObj.ClearFormatting() # 清除查找文本的格式,表示查找文本時(shí)不限制文本格式
findObj.Text = w # 設(shè)置查找文本
findObj.Replacement.ClearFormatting() # 清除替換文本的格式設(shè)置
findObj.Replacement.Text = w # 將替換文本設(shè)置為與查找文本相同的值
findObj.Replacement.Font.Bold = True # 設(shè)置替換文本的格式為加粗
findObj.Replacement.Font.Italic = True # 設(shè)置替換文本的格式為斜體
findObj.Replacement.Font.Underline = cs.wdUnderlineDouble # 設(shè)置替換文本加雙下劃線
findObj.Replacement.Highlight = True # 設(shè)置替換時(shí)對(duì)文本做突出顯示
findObj.Execute(Replace=cs.wdReplaceAll) # 執(zhí)行查找和替換,wdReplaceAll表示全部替換
# 將處理后的word文檔以新的文件名另存
doc.SaveAs(output_file)
# 關(guān)閉Word文檔
doc.Close()
# 關(guān)閉Word程序窗口
word.Quit()
測(cè)試效果:

4. 在Word文檔中批量替換關(guān)鍵詞
from pathlib import Path
import win32com.client as win32
# 創(chuàng)建Path對(duì)象
src_folder = Path(r'E:\pythonProject\python辦公自動(dòng)化\第5章 自動(dòng)化處理Word文檔\Files')
output_folder = Path(r'E:\pythonProject\python辦公自動(dòng)化\第5章 自動(dòng)化處理Word文檔\output_files')
# 判斷輸出文件夾是否存在
if not output_folder.exists():
# 創(chuàng)建文件夾
output_folder.mkdir(parents=True)
file_list = list(src_folder.glob('*.docx')) # 獲得給定文件的word文檔路徑列表
# 以替換前的關(guān)鍵詞作為建,以替換后的內(nèi)容作為值,建立字典
replace_dict = {'確定': '確認(rèn)', '訂立': '簽訂', '執(zhí)行': '履行'}
word = win32.gencache.EnsureDispatch('Word.Application') # 打開(kāi)Word程序窗口
word.Visible = False # 設(shè)置窗口隱藏
cs = win32.constants # 導(dǎo)入Word開(kāi)發(fā)接口提供的預(yù)設(shè)常量集合
for file in file_list:
doc = word.Documents.Open(str(file)) # 打開(kāi)Word文檔
print(file.name)
for old_txt, new_txt in replace_dict.items():
findObj = word.Selection.Find # 創(chuàng)建Find對(duì)象
findObj.ClearFormatting() # 清除查找文本的格式,表示查找文本時(shí)不限制文本格式
findObj.Text = old_txt # 設(shè)置查找文本
findObj.Replacement.ClearFormatting() # 清除替換文本的格式設(shè)置
findObj.Replacement.Text = new_txt # 設(shè)置替換文本
# 判斷Find對(duì)象的Execute()函數(shù)在文檔中是否找到關(guān)鍵詞
if findObj.Execute(Replace=cs.wdReplaceAll): # 執(zhí)行查找和替換,wdReplaceAll表示全部替換
print(f'{old_txt}-->{new_txt}')
new_file = output_folder / file.name # 生成輸出文件的路徑
doc.SaveAs(str(new_file)) # # 將處理后的word文檔以新的文件名另存
doc.Close() # 關(guān)閉Word文檔
word.Quit() # 關(guān)閉Word程序窗口
測(cè)試效果:


以上就是Python實(shí)現(xiàn)自動(dòng)化處理Word文檔的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python自動(dòng)化處理Word的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python二叉搜索樹(shù)與雙向鏈表轉(zhuǎn)換算法示例
這篇文章主要介紹了Python二叉搜索樹(shù)與雙向鏈表轉(zhuǎn)換算法,涉及Python二叉樹(shù)構(gòu)建、遍歷及鏈表構(gòu)造等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
Python scipy實(shí)現(xiàn)差分進(jìn)化算法
差分進(jìn)化算法是廣義的遺傳算法的一種,核心思想是變異,這篇文章主要為大家介紹的則是著名的scipy庫(kù)中對(duì)差分進(jìn)化算法的實(shí)現(xiàn),希望對(duì)大家有所幫助2023-08-08
Python爬蟲(chóng)使用bs4方法實(shí)現(xiàn)數(shù)據(jù)解析
這篇文章主要介紹了Python爬蟲(chóng)使用bs4方法實(shí)現(xiàn)數(shù)據(jù)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
解決 jupyter notebook 回車換兩行問(wèn)題
這篇文章主要介紹了解決 jupyter notebook 回車換兩行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
python MNIST手寫(xiě)識(shí)別數(shù)據(jù)調(diào)用API的方法
這篇文章主要介紹了python MNIST手寫(xiě)識(shí)別數(shù)據(jù)調(diào)用API的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
django xadmin實(shí)現(xiàn)自定義頁(yè)面并且權(quán)限控制方式
這篇文章主要介紹了django xadmin實(shí)現(xiàn)自定義頁(yè)面并且權(quán)限控制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

