使用Python實現(xiàn)一鍵往Word文檔的表格中填寫數(shù)據(jù)
一、Python處理Word
- Python處理Word的好處
使用Python處理Word文檔具有許多優(yōu)勢,以下是一些主要的好處:
自動化和批量處理: Python可以幫助你自動化處理大量的Word文檔,例如批量替換文本、生成報告、提取數(shù)據(jù)等。這樣可以節(jié)省大量的時間和勞動力。
數(shù)據(jù)提取和轉(zhuǎn)換: 如果你需要從大量的Word文檔中提取特定數(shù)據(jù),Python可以輕松實現(xiàn)這一點。你可以編寫腳本來搜索并提取你需要的信息,然后將其轉(zhuǎn)換為其他格式,如CSV、Excel或數(shù)據(jù)庫。
定制化和自由度: 使用Python處理Word文檔意味著你可以根據(jù)自己的需求定制處理過程。你可以創(chuàng)建定制的模板、樣式和布局,以及根據(jù)項目需求進行靈活的調(diào)整。
與其他工具和技術(shù)的集成: Python可以與許多其他庫和技術(shù)進行集成,例如數(shù)據(jù)庫、Web服務(wù)、數(shù)據(jù)分析工具等。這使得你可以將Word文檔的處理與其他工作流程結(jié)合起來,實現(xiàn)更復(fù)雜的任務(wù)。
文檔生成和報告: 如果你需要定期生成報告或文檔,Python可以通過自動生成文本、圖表和表格等來實現(xiàn)。這對于數(shù)據(jù)分析、項目管理和業(yè)務(wù)報告等非常有用。
版本控制和代碼重用: 使用Python代碼處理Word文檔可以實現(xiàn)代碼重用和版本控制。你可以將處理文檔的代碼存儲在版本控制系統(tǒng)中,以便團隊成員協(xié)作、維護和共享代碼。
跨平臺性: 大多數(shù)Python庫可以在多個操作系統(tǒng)上運行,因此你可以在Windows、Linux和macOS等不同平臺上處理Word文檔。
- Python處理Word的第三方庫
在Python中,有幾個第三方庫可以用于處理Word文檔。以下是一些常用的第三方庫:
python-docx: 這是一個用于創(chuàng)建和修改Microsoft Word文檔(.docx格式)的流行庫。它允許你讀取、編輯和創(chuàng)建Word文檔,包括段落、表格、圖像等。
pywin32(僅限Windows): 這個庫允許你在Windows上與Microsoft Office應(yīng)用程序進行交互,包括Word。它可以用于自動化操作,例如創(chuàng)建、打開、編輯和保存文檔。
docx2txt: 這個庫可以用來將.docx文件轉(zhuǎn)換為純文本(.txt格式)。它適用于從Word文檔中提取文本內(nèi)容。
python-docx-template: 這個庫擴展了
python-docx
庫,使你能夠在模板中插入變量和循環(huán),并以更動態(tài)的方式生成Word文檔。py-docx: 這是另一個用于處理.docx文件的庫。它提供了類似
python-docx
的功能,但使用不同的接口。
二、一鍵往Word文檔的表格中填寫數(shù)據(jù)
技術(shù)工具:
Python版本:3.9
代碼編輯器:jupyter notebook
在工作中,我們經(jīng)常遇到將Excel表中的部分信息填寫到Word文檔的對應(yīng)表格中,以生成報告,方便打印。今天我們就來試試如何往固定的Word模板中填寫數(shù)據(jù)。此例要求將Excel檔的“收貨數(shù)據(jù)”填寫到Word檔的“收貨記錄”中去,并加總收貨數(shù)量。模板是下面這樣的。
要求結(jié)果是這樣的:
首先,需要從Excel表格中提取數(shù)據(jù)。
#從Excel表中提取數(shù)據(jù) from openpyxl import load_workbook wb = load_workbook("收貨數(shù)據(jù).xlsx") ws = wb.active data=[] for row in range(2,ws.max_row+1): seq = ws["A"+str(row)].value supplier = ws["B"+str(row)].value material_pn = ws["C"+str(row)].value material_model = ws["D"+str(row)].value desp = ws["E"+str(row)].value qty = ws["F"+str(row)].value date = ws["G"+str(row)].value.date() info = [seq, supplier, material_pn, material_model, desp, qty, date] data.append(info)
# 檢查一下數(shù)據(jù) data[0]
由于需要將數(shù)量列的數(shù)據(jù)加總,所以先定義一個加總函數(shù),以便后面調(diào)用。
#定義數(shù)量加總函數(shù) def Sum_list(list): s = 0 for i in list: #累加列表中的所有數(shù) s+=i return s
# 加總數(shù)量列的所有數(shù)字 qty_list=[] for i in data: qty_list.append(i[5]) #數(shù)量在內(nèi)層列表的第6個位置,索引是5 sum_qty= Sum_list(qty_list) #調(diào)用加總函數(shù)加總 sum_qty
定義單元格合并函數(shù)
#定義合并單元格的函數(shù) def Merge_cells(table,target_list,start_row,col): ''' table: 是需要操作的表格 target_list: 是目標列表,即含有重復(fù)數(shù)據(jù)的列表 start_row: 是開始行,即表格中開始比對數(shù)據(jù)的行(需要將標題除開) col: 是需要處理數(shù)據(jù)的列 ''' start = 0 #開始行計數(shù) end = 0 #結(jié)束行計數(shù) reference = target_list[0] #設(shè)定基準,以列表中的第一個字符串開始 for i in range(len(target_list)): #遍歷列表 if target_list[i] != reference: #開始比對,如果內(nèi)容不同執(zhí)行如下 reference = target_list[i] #基準變成列表中下一個字符串 end = i - 1 table.cell(start+start_row,col).merge(table.cell(end+start_row,col)) start = end + 1 if i == len(target_list) - 1: #遍歷到最后一行,按如下操作 end = i table.cell(start+start_row,col).merge(table.cell(end+start_row,col))
然后往word的表格中寫入數(shù)據(jù),并合并單元格。
#數(shù)據(jù)提取即處理完畢后,就可以往Word的表格中寫入數(shù)據(jù)了 from docx import Document doc = Document("收貨記錄模板.docx") #讀取word文檔中的第一個表格的第二和第三列除標題和尾部總數(shù)行的數(shù)據(jù) table = doc.tables[0] #已確定是第一個表格,其索引是0 supplier = [] #存儲供應(yīng)商名稱 pn = [] #存儲物料編碼 for i in data: supplier.append(i[1]) pn.append(i[2]) #按需增加行,以便填寫數(shù)據(jù) for i in range(len(supplier)): #模板中已經(jīng)有一行了,所以總共只需增加len(supplier)行 table.add_row() #增加好行后先做合并單元格操作 Merge_cells(table,supplier,1,1) #開始合并行為2,索引為1;供應(yīng)商名稱是在2列,索引為1 Merge_cells(table,pn,1,2) #開始合并行為2,索引為1;物料編碼是在3列,索引為2 #寫入數(shù)據(jù)到表格 for row in range(1,len(supplier)+1): for col in range(7): table.cell(row,col).text = str(data[row-1][col]) max_row = len(table.rows) #獲取最大一行 qty_row = max_row-1 #確定需要寫入加總數(shù)據(jù)的一行 table.cell(qty_row,5).merge(table.cell(qty_row,5)) #合并右下角用于填寫數(shù)量的兩個單元格 table.cell(qty_row,4).text = '總數(shù):' table.cell(qty_row,5).text = str(sum_qty) doc.save("收貨記錄.docx")
由于合并供應(yīng)商名稱和物料編碼兩列中的相同內(nèi)容的單元格,所有需要把這兩列的信息從總數(shù)據(jù)`data`中單獨提取出來。新建了`supplier`和`pn`兩個空列表,然后遍歷`data`,將數(shù)據(jù)取出并存入空列表。隨后,我們根據(jù)實際需要,新增一些空白行,以便后面寫入數(shù)據(jù)。新增行的數(shù)量以`supplier`列表中元素的個數(shù)為依據(jù)。這個表格已經(jīng)存在一個空白行,算上外行要填“總數(shù)”,只需增加`supplier`列表中元素的個數(shù)對應(yīng)那么多行就夠了。當然這里也可以以列表`pn`中元素個數(shù)為依據(jù),兩者是相等的。增加好行后,先調(diào)用函數(shù)`Merge_cells`做合并單元格操作(如果先寫入數(shù)據(jù),再合并,會導(dǎo)致單元格內(nèi)容重復(fù))。合并完后,就可以寫入數(shù)據(jù)到表格了,此處遍歷需要寫入數(shù)據(jù)的行和列,然后從`data`中提取數(shù)據(jù)。數(shù)據(jù)行寫完后,還需要寫入最后一行的“總數(shù)”字樣和總的物料數(shù)量。最后保存數(shù)據(jù),得到如下結(jié)果:
以上就是使用Python實現(xiàn)一鍵往Word文檔的表格中填寫數(shù)據(jù)的詳細內(nèi)容,更多關(guān)于Python一鍵往Word填數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python GUI庫圖形界面開發(fā)之PyQt5布局控件QGridLayout詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5布局控件QGridLayout詳細使用方法與實例,需要的朋友可以參考下2020-03-03python 實現(xiàn)求解字符串集的最長公共前綴方法
今天小編就為大家分享一篇python 實現(xiàn)求解字符串集的最長公共前綴方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Webots下載安裝?+?Pycharm聯(lián)調(diào)使用教程
Webots是一個開源的三維移動機器人模擬器,它最初是作為研究移動機器人中各種控制算法的研究工具開發(fā)的,自2018年12月起,Webots作為開源軟件發(fā)布,并獲得Apache 2.0許可證,這篇文章主要介紹了Webots下載安裝?+?Pycharm聯(lián)調(diào)?,需要的朋友可以參考下2023-02-02