EXCEL 中數據 批量 填充進 word 中


工具: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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM