工具:Python3.7
需求描述:將EXCEL中 第二行 數據 填在 word 對應位置上,然后保存為 "姓名+任務.docx"文件。
再將EXCEL中 第三行 數據 填在 word 對應位置上,然后保存為 "姓名+任務.docx"文件。
依此類推。
EXCEL數據信息 如下圖所示:
word數據信息 如下圖所示:
最終需求結果 如下圖所示:
開始操作:
第一步:修改成可讀模板
使得excel列名稱特殊化,例如在名稱之前加個符號,如下圖:
在word對應位置 填寫 該 特殊化 名稱,例如:
第二步:將 excel信息表 以及 word模板表 放在同一文件夾內,例如:
第二步:運行代碼
完整代碼如下:
1 from docx import Document 2 from openpyxl import load_workbook 3 import os 4 5 path = r'D:\pywork\12' # EXCEL信息與word信息所在文件夾 6 if not os.path.exists(path + '/' + '任務集'): #如果目標位置 不存在該文件夾 ,則執行下面命令 7 os.mkdir(path + '/' + '任務集') #創建一個新的文件夾, 8 9 excel_1= load_workbook(path + '/' + 'excel信息表.xlsx') #打開excel 10 E1 = excel_1.active #表示當前活躍的表,本案例中 當前活躍表為sheet1 11 #也可以使用 E1 = excel_1.get_sheet_by_name('Sheet1') 來獲取工作表1 12 13 for hang in range(2, E1.max_row + 1): # 從第2行開始循環,有幾行就循環到幾 14 word_1 = Document(path + '/' + 'word模板表.docx') #讀取word 15 for lie in range(1, E1.max_column + 1): # 從第一列開始循環,excel有幾列就循環到幾 16 lieming = str(E1.cell(row=1, column=lie).value) # 在第一行中,記錄excel中的列值,也就是列名 17 liezhi = str(E1.cell(row=hang, column=lie).value) #在當前行中,記錄excel每列的值 18 19 if '00:00:00' in liezhi: #判斷所取的值中 是否 存在 時間,如果excel中涉及日期,都需要加此判斷,否則列值返回的是“日期 時間” 20 liezhi=liezhi.split()[0] #按照 空格 進行分割,並返回第一個字符串 21 22 all_duanluo = word_1.paragraphs #讀word中 所有 段落 內容 23 for i in all_duanluo: # 在每一個段落里面 操作 24 for j in i.runs: #在每一個 分塊中 操作 25 j.text = j.text.replace(lieming, liezhi) # 將分塊 里面的 leiming 對應地換成 liezhi,即列名換成列值 26 27 all_biaoge = word_1.tables #讀word中 所有 表格 內容 28 for m in all_biaoge: #在每一個 表格 中操作 29 for n in m.rows: #讀取某個 表格 的每一行 30 for q in n.cells: #讀取 每一行 的每個小單元格 31 q.text = q.text.replace(lieming, liezhi)# 將個小單元格里面的 leiming 對應地換成 liezhi,即列名換成列值 32 33 wenjianming = str(E1.cell(row=hang, column=1).value) #獲取文件名 34 word_1.save(path + '/' + f'任務集/{wenjianming}任務.docx') #保存為 ‘姓名+任務.docx’
注意:
1.在word模板表 里面 填寫 格式化數據時(本例中 填寫的是 *XX),要 從前往后 依次填寫,如果 運行程序后 出現 沒有被填充的問題。 很可能是 word 填寫格式化數據時 出了格式 問題。判斷是否為 該問題 的代碼如下:(前24行代碼與上述代碼一致。)
正常的返回結果如下:
不正常返回結果如下:
1 from docx import Document 2 from openpyxl import load_workbook 3 import os 4 5 path = r'D:\pywork\12' # EXCEL信息與word信息所在文件夾 6 if not os.path.exists(path + '/' + '任務集'): #如果目標位置 不存在該文件夾 ,則執行下面命令 7 os.mkdir(path + '/' + '任務集') #創建一個新的文件夾, 8 9 excel_1= load_workbook(path + '/' + 'excel信息表.xlsx') #打開excel 10 E1 = excel_1.active #表示當前活躍的表,本案例中 當前活躍表為sheet1 11 #也可以使用 E1 = excel_1.get_sheet_by_name('Sheet1') 來獲取工作表1 12 13 for hang in range(2, E1.max_row + 1): # 從第2行開始循環,有幾行就循環到幾 14 word_1 = Document(path + '/' + 'word模板表.docx') #讀取word 15 for lie in range(1, E1.max_column + 1): # 從第一列開始循環,excel有幾列就循環到幾 16 lieming = str(E1.cell(row=1, column=lie).value) # 在第一行中,記錄excel中的列值,也就是列名 17 liezhi = str(E1.cell(row=hang, column=lie).value) #在當前行中,記錄excel每列的值 18 19 if '00:00:00' in liezhi: #判斷所取的值中 是否 存在 時間,如果excel中涉及日期,都需要加此判斷,否則列值返回的是“日期 時間” 20 liezhi=liezhi.split()[0] #按照 空格 進行分割,並返回第一個字符串 21 22 all_duanluo = word_1.paragraphs #讀word中 所有 段落 內容 23 for i in all_duanluo: # 在每一個段落里面 操作 24 for j in i.runs: #在每一個 分塊中 操作 25 print(j.text)