Python批量對(duì)word文檔進(jìn)行操作步驟
導(dǎo)讀
前面幾章我們以經(jīng)介紹了怎么批量對(duì)excel和ppt操作今天我們說(shuō)說(shuō)對(duì)word文檔的批量操作
應(yīng)用
python-docx允許您創(chuàng)建新文檔以及對(duì)現(xiàn)有文檔進(jìn)行更改。實(shí)際上,它只允許您對(duì)現(xiàn)有文檔進(jìn)行更改;只是如果您從一個(gè)沒(méi)有任何內(nèi)容的文檔開(kāi)始,一開(kāi)始可能會(huì)覺(jué)得您是從頭開(kāi)始創(chuàng)建一個(gè)文檔。
這個(gè)特性是一個(gè)強(qiáng)大的特性。文檔的外觀很大程度上取決于刪除所有內(nèi)容時(shí)留下的部分。樣式、頁(yè)眉和頁(yè)腳等內(nèi)容與主要內(nèi)容分開(kāi)包含,允許您在起始文檔中進(jìn)行大量自定義,然后出現(xiàn)在您生成的文檔中。
讓我們逐步完成創(chuàng)建文檔的步驟,一次創(chuàng)建一個(gè)示例,從您可以對(duì)文檔執(zhí)行的兩項(xiàng)主要操作開(kāi)始,將其打開(kāi)并保存。
我這里做一個(gè)簡(jiǎn)單的演示
還是先定義合并單元格函數(shù),以便后續(xù)多次調(diào)用。由于處理Word中表格的代碼與處理Excel不同,所以函數(shù)也要做微調(diào)。主要變化就是合并的函數(shù)表達(dá),對(duì)于word中的表格,表達(dá)式是table.cell(row1,col1).merge(table.cell(row2,col2)),意思是將第row1行col1列到row2行col2列之間的表格合并(row2,col2要分別大于等于row1和col1)。需要注意的是cell(0,0)表示第一行第一列的單元格,以此類(lèi)推。如下函數(shù)是在例28的基礎(chǔ)上修改的。
#定義合并單元格的函數(shù)
def Merge_cells(table,target_list,start_row,col):
'''
table: 是需要操作的表格
target_list: 是目標(biāo)列表,即含有重復(fù)數(shù)據(jù)的列表
start_row: 是開(kāi)始行,即表格中開(kāi)始比對(duì)數(shù)據(jù)的行(需要將標(biāo)題除開(kāi))
col: 是需要處理數(shù)據(jù)的列
'''
start = 0 #開(kāi)始行計(jì)數(shù)
end = 0 #結(jié)束行計(jì)數(shù)
reference = target_list[0] #設(shè)定基準(zhǔn),以列表中的第一個(gè)字符串開(kāi)始
for i in range(len(target_list)): #遍歷列表
if target_list[i] != reference: #開(kāi)始比對(duì),如果內(nèi)容不同執(zhí)行如下
reference = target_list[i] #基準(zhǔn)變成列表中下一個(gè)字符串
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中相應(yīng)表格里的數(shù)據(jù),并提取出來(lái),以便作為是否合并的判斷基礎(chǔ)。使用Document打開(kāi)word文檔,先查看一下其中表格的個(gè)數(shù),以便我們鎖定要處理的表格。由于word里面可能有隱藏表格,或者一個(gè)表格中有一段去掉了邊框,讓人看起來(lái)像是兩個(gè)表格,直接在word中去數(shù)表格個(gè)數(shù)有時(shí)會(huì)不靠譜。通過(guò)len(doc.tables)看到,這個(gè)文檔里面有2個(gè)表格。打開(kāi)word文檔,我們可以看到要處理的表格是第一個(gè),即doc.tables[0]。如果情況較為復(fù)雜,我們可以打印表格中第一行單元格的內(nèi)容進(jìn)一步確認(rèn)是否是我們需要處理的表格。確認(rèn)好表格的序號(hào)后,就可以開(kāi)始讀取內(nèi)容了。
from docx import Document
doc = Document("收貨記錄.docx")
print("這個(gè)工作表有 {} 個(gè)表格。\n".format(len(doc.tables))) #查看表格中的個(gè)數(shù),以便鎖定我們要處理的表格
print("第一個(gè)表格的第一行的單元格中的內(nèi)容如下:")
for i in doc.tables[0].rows[0].cells: #讀取第一個(gè)表格的第一行的單元格中的內(nèi)容
print(i.text)
第一個(gè)表格的第一行的單元格中的內(nèi)容如下:
序號(hào)
供應(yīng)商名稱(chēng)
貨物編碼
貨物型號(hào)
貨物說(shuō)明
數(shù)量
日期表格:

doc.tables[0].rows[0].cells[0].text '序號(hào)'
接著:
#讀取word文檔中的第一個(gè)表格的第二和第三列除標(biāo)題和尾部總數(shù)行的數(shù)據(jù)
doc = Document("收貨記錄.docx")
table = doc.tables[0] #已確定是第一個(gè)表格,其索引是0
supplier = [] #存儲(chǔ)供應(yīng)商名稱(chēng)
pn = [] #存儲(chǔ)物料編碼
max_row = len(table.rows) #獲取第最大一行
print("表格共有{}行".format(max_row))
#讀取第二行到29行,第2,3列中的數(shù)據(jù)
for i in range(1,max_row-1):
supplier_name = table.rows[i].cells[1].text #cells[1]指表格第二列
supplier.append(supplier_name)
material_pn = table.rows[i].cells[2].text #cells[2]指表格第三列
pn.append(material_pn)
print("獲取到{}個(gè)供應(yīng)商名稱(chēng),{}個(gè)物料編碼。".format(len(supplier),len(pn)))
表格共有30行
獲取到28個(gè)供應(yīng)商名稱(chēng),28個(gè)物料編碼。Merge_cells(table,supplier,1,1) #開(kāi)始合并行為2,索引為1;供應(yīng)商名稱(chēng)是在2列,索引為1
Merge_cells(table,pn,1,2) #開(kāi)始合并行為2,索引為1;物料編碼是在3列,索引為2
doc.save("檢查.docx")到這一步,合并單元格算是完成了,但結(jié)果如下圖所示,原單元格中的內(nèi)容全部集中在一起,造成了重復(fù)內(nèi)容。我們需要重寫(xiě)這些單元格以覆蓋掉重復(fù)的內(nèi)容,即可得到我們想要的結(jié)果。
結(jié)果:

細(xì)節(jié)介紹
關(guān)于python-docx庫(kù)
鏈接:傳送門(mén)
這里有關(guān)于操作的詳細(xì)介紹




到此這篇關(guān)于Python批量對(duì)word文檔進(jìn)行操作的文章就介紹到這了,更多相關(guān)python批量word文檔操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python內(nèi)置函數(shù)之filter map reduce介紹
Python內(nèi)置了一些非常有趣、有用的函數(shù),如:filter、map、reduce,都是對(duì)一個(gè)集合進(jìn)行處理,filter很容易理解用于過(guò)濾,map用于映射,reduce用于歸并. 是Python列表方法的三架馬車(chē)2014-11-11
Python實(shí)現(xiàn)生成密碼字典的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)生成密碼字典的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python密碼字典的實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),涉及字符串運(yùn)算、文件讀寫(xiě)等相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
詳解Django關(guān)于StreamingHttpResponse與FileResponse文件下載的最優(yōu)方法
這篇文章主要介紹了詳解Django關(guān)于StreamingHttpResponse與FileResponse文件下載的最優(yōu)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

