<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用Python實現Word檔案的自動化處理,包括批次生成Word檔案、在Word檔案中批次進行查詢和替換、將Word檔案批次轉換成PDF等。
安裝openpyxl模組
pip install openpyxl
安裝python-docx模組
pip install python-docx
openpyxl模組可以讀寫擴充套件名為.xlsx/.xlsm/.xltx/.xltm的Excel檔案。
python-docx模組可以讀寫擴充套件名為.docx的Word檔案,但不能處理擴充套件名為.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): """ 檔案內容替換 :param doc: Word模板檔案 :param old_info: 源文字 :param new_info: 新文字 :return: """ # 遍歷Word檔案中的所有段落 for para in doc.paragraphs: # 遍歷每個段落中的run物件 for run in para.runs: # 替換run物件的文字內容 # 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: # 替換單元格內容 cell.text = cell.text.replace('《' + old_info + '》', new_info) # 設定表格中的內容居中顯示 # 計算表格的rows和cols的長度 rows = len(table.rows) cols = len(table.columns) # 迴圈將每一行,每一列都設定為居中 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('學生成績表.xlsx') # 開啟工作簿 ws = wb.active # 啟用工作簿中的工作表 # 遍歷工作表的行,從第2行開始 for row in range(2, ws.max_row + 1): doc = Document('成績通知書.docx') # 建立檔案物件 # 遍歷工作表的列 for col in range(1, ws.max_column + 1): # 讀取當前列的第一行,即列標題,單元格的值轉換成字串 old_info = str(ws.cell(row=1, column=col).value) # 讀取當前列的資料,單元格的值需要轉換成字串 new_info = str(ws.cell(row=row, column=col).value) # 進行內容替換 info_update(doc, old_info, new_info) student_name = str(ws.cell(row=row, column=1).value) doc.save(f'scores\成績單--致{student_name}.docx')
測試檔案:
測試效果:
安裝pywin32模組
pip install pywin32
from pathlib import Path from win32com.client import constants, gencache # 建立Path物件 # 路徑要使用絕對路徑 src_folder = Path(r'E:pythonProjectpython辦公自動化第5章 自動化處理Word檔案scores') output_folder = Path(r'E:pythonProjectpython辦公自動化第5章 自動化處理Word檔案PDF') # 判斷輸出目錄是否存在 if not output_folder.exists(): # 不存在則建立 output_folder.mkdir(parents=True) file_list = list(src_folder.glob('*[.docx|.doc]')) # 獲得要轉換的Word檔案的路徑列表 word = gencache.EnsureDispatch('Word.Application') # 建立Word程式物件 # word = win32com.client.Dispatch('Word.Application') for word_path in file_list: # 生成轉換後的PDF檔案的儲存路徑 pdf_path = output_folder / word_path.with_suffix('.pdf').name # with_suffix()返回檔案字尾已更改的新路徑 # 判斷pdf檔案路徑是否已存在 if pdf_path.exists(): continue else: # 路徑需要是絕對路徑,否則會報錯 doc = word.Documents.Open(str(word_path), ReadOnly=1) # 開啟Word檔案 # 設定匯出格式為pdf doc.ExportAsFixedFormat(str(pdf_path), constants.wdExportFormatPDF) # 將開啟的Word檔案另存為PDF檔案,儲存到給定的路徑 doc.Close() # 關閉Word檔案 word.Quit() # 關閉Word程式視窗
測試檔案:
測試效果:
import win32com.client as win32 # 路徑要使用絕對路徑 input_file = r'E:pythonProjectpython辦公自動化第5章 自動化處理Word檔案勞動合同.docx' output_file = r'E:pythonProjectpython辦公自動化第5章 自動化處理Word檔案勞動合同1.docx' word = win32.gencache.EnsureDispatch('Word.Application') # 開啟一個Word程式視窗 word.Visible = False # 設定視窗為隱藏狀態,即在後臺執行 cs = win32.constants # 匯入Word開發介面提供的預設常數集合 doc = word.Documents.Open(input_file) # 開啟要處理的Word檔案 # 設定要標記的關鍵詞列表 keyword_list = ['報酬', '保險', '培訓', '解除', '終止'] # 設定每個關鍵詞的突出顯示顏色 color_list = [cs.wdYellow, 14, cs.wdGreen, cs.wdRed, 13] """ 值--顏色常數--含義: 1--wdBlack--黑色 2--wdBlue--藍色 3--wdTurquoise--青綠色 4--wdBrightGreen--鮮綠色 5--wdPink--粉紅色 6--wdRed--紅色 7--wdYellow--黃色 8--wdWhite--白色 9--wdDarkBlue--深藍色 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()函數將關鍵詞列表和標記顏色列表中的元素一一配對分別賦給w和c word.Options.DefaultHighlightColorIndex = c # 設定突出顯示的顏色 findObj = word.Selection.Find # 建立Find物件 findObj.ClearFormatting() # 清除查詢文字的格式,表示查詢文字時不限制文字格式 findObj.Text = w # 設定查詢文字 findObj.Replacement.ClearFormatting() # 清除替換文字的格式設定 findObj.Replacement.Text = w # 將替換文字設定為與查詢文字相同的值 findObj.Replacement.Font.Bold = True # 設定替換文字的格式為加粗 findObj.Replacement.Font.Italic = True # 設定替換文字的格式為斜體 findObj.Replacement.Font.Underline = cs.wdUnderlineDouble # 設定替換文字加雙下劃線 findObj.Replacement.Highlight = True # 設定替換時對文字做突出顯示 findObj.Execute(Replace=cs.wdReplaceAll) # 執行查詢和替換,wdReplaceAll表示全部替換 # 將處理後的word檔案以新的檔名另存 doc.SaveAs(output_file) # 關閉Word檔案 doc.Close() # 關閉Word程式視窗 word.Quit()
測試效果:
from pathlib import Path import win32com.client as win32 # 建立Path物件 src_folder = Path(r'E:pythonProjectpython辦公自動化第5章 自動化處理Word檔案Files') output_folder = Path(r'E:pythonProjectpython辦公自動化第5章 自動化處理Word檔案output_files') # 判斷輸出資料夾是否存在 if not output_folder.exists(): # 建立資料夾 output_folder.mkdir(parents=True) file_list = list(src_folder.glob('*.docx')) # 獲得給定檔案的word檔案路徑列表 # 以替換前的關鍵詞作為建,以替換後的內容作為值,建立字典 replace_dict = {'確定': '確認', '訂立': '簽訂', '執行': '履行'} word = win32.gencache.EnsureDispatch('Word.Application') # 開啟Word程式視窗 word.Visible = False # 設定視窗隱藏 cs = win32.constants # 匯入Word開發介面提供的預設常數集合 for file in file_list: doc = word.Documents.Open(str(file)) # 開啟Word檔案 print(file.name) for old_txt, new_txt in replace_dict.items(): findObj = word.Selection.Find # 建立Find物件 findObj.ClearFormatting() # 清除查詢文字的格式,表示查詢文字時不限制文字格式 findObj.Text = old_txt # 設定查詢文字 findObj.Replacement.ClearFormatting() # 清除替換文字的格式設定 findObj.Replacement.Text = new_txt # 設定替換文字 # 判斷Find物件的Execute()函數在檔案中是否找到關鍵詞 if findObj.Execute(Replace=cs.wdReplaceAll): # 執行查詢和替換,wdReplaceAll表示全部替換 print(f'{old_txt}-->{new_txt}') new_file = output_folder / file.name # 生成輸出檔案的路徑 doc.SaveAs(str(new_file)) # # 將處理後的word檔案以新的檔名另存 doc.Close() # 關閉Word檔案 word.Quit() # 關閉Word程式視窗
測試效果:
以上就是Python實現自動化處理Word檔案的方法詳解的詳細內容,更多關於Python自動化處理Word的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45