日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

element 表格单元格内容不换行_实例29_在Word表格中将上下行相同内容的单元格自动合并...

發布時間:2025/3/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 element 表格单元格内容不换行_实例29_在Word表格中将上下行相同内容的单元格自动合并... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實例28講了如何在Excel文件中自動合并上下行相同內容的單元格,此例則講一講如何在Word文件中做類似的操作。因為處理Excel和Word的模塊是不同的,所以合并單元格也有一些差異。相對來說,Word中的操作更麻煩一些。

在Excel中,我們手動合并單元格后,合并的單元格中只保留1個值,而Word則全部保留。比如在word中,3個單元格的內容都是“ABC”,合并之后就變成了“ABCABCABC”,這顯然不是我們想要的。下圖是原始文檔,要求將第2列和第3列中,上下相鄰單元格內容一樣的合并。

還是先定義合并單元格函數,以便后續多次調用。由于處理Word中表格的代碼與處理Excel不同,所以函數也要做微調。主要變化就是合并的函數表達,對于word中的表格,表達式是table.cell(row1,col1).merge(table.cell(row2,col2)),意思是將第row1行col1列到row2行col2列之間的表格合并(row2,col2要分別大于等于row1和col1)。需要注意的是cell(0,0)表示第一行第一列的單元格,以此類推。如下函數是在例28的基礎上修改的。

#定義合并單元格的函數 def Merge_cells(table,target_list,start_row,col):'''table: 是需要操作的表格target_list: 是目標列表,即含有重復數據的列表start_row: 是開始行,即表格中開始比對數據的行(需要將標題除開)col: 是需要處理數據的列'''start = 0 #開始行計數end = 0 #結束行計數reference = target_list[0] #設定基準,以列表中的第一個字符串開始for i in range(len(target_list)): #遍歷列表if target_list[i] != reference: #開始比對,如果內容不同執行如下reference = target_list[i] #基準變成列表中下一個字符串end = i - 1 table.cell(start+start_row,col).merge(table.cell(end+start_row,col))start = end + 1if i == len(target_list) - 1: #遍歷到最后一行,按如下操作end = itable.cell(start+start_row,col).merge(table.cell(end+start_row,col))

然后需要讀取word中相應表格里的數據,并提取出來,以便作為是否合并的判斷基礎。使用Document打開word文檔,先查看一下其中表格的個數,以便我們鎖定要處理的表格。由于word里面可能有隱藏表格,或者一個表格中有一段去掉了邊框,讓人看起來像是兩個表格,直接在word中去數表格個數有時會不靠譜。

通過len(doc.tables)看到,這個文檔里面有2個表格。打開word文檔,我們可以看到要處理的表格是第一個,即doc.tables[0]。如果情況較為復雜,我們可以打印表格中第一行單元格的內容進一步確認是否是我們需要處理的表格。確認好表格的序號后,就可以開始讀取內容了。

from docx import Document doc = Document("收貨記錄.docx") print("這個工作表有 {} 個表格。n".format(len(doc.tables))) #查看表格中的個數,以便鎖定我們要處理的表格print("第一個表格的第一行的單元格中的內容如下:") for i in doc.tables[0].rows[0].cells: #讀取第一個表格的第一行的單元格中的內容print(i.text) 》 這個工作表有 2 個表格。第一個表格的第一行的單元格中的內容如下: 序號 供應商名稱 貨物編碼 貨物型號 貨物說明 數量 日期#讀取word文檔中的第一個表格的第二和第三列除標題和尾部總數行的數據 doc = Document("收貨記錄.docx") table = doc.tables[0] #已確定是第一個表格,其索引是0 supplier = [] #存儲供應商名稱 pn = [] #存儲物料編碼 max_row = len(table.rows) #獲取第最大一行 print("表格共有{}行".format(max_row))#讀取第二行到29行,第2,3列中的數據 for i in range(1,max_row-1):supplier_name = table.rows[i].cells[1].text #cells[1]指表格第二列supplier.append(supplier_name)for i in range(1,max_row-1):material_pn = table.rows[i].cells[2].text #cells[2]指表格第三列pn.append(material_pn)print("獲取到{}個供應商名稱,{}個物料編碼。".format(len(supplier),len(pn)))>> 表格共有30行 獲取到28個供應商名稱,28個物料編碼。

以上程序,獲取了表格中第2列和第3列的數據,并存入了列表supplier和pn。然后就可以開始判斷,并合并單元格了。下面調用之前定義好的函數Merge_cells,傳入相應的參數,運行即可完成單元格合并。

Merge_cells(table,supplier,1,1) #開始合并行為2,索引為1;供應商名稱是在2列,索引為1 Merge_cells(table,pn,1,2) #開始合并行為2,索引為1;物料編碼是在3列,索引為2 doc.save("檢查.docx")

到這一步,合并單元格算是完成了,但結果如下圖所示,原單元格中的內容全部集中在一起,造成了重復內容。我們需要重寫這些單元格以覆蓋掉重復的內容,即可得到我們想要的結果。

#重新往第2和第3列寫入數據,以覆蓋之前重復的數據 for row in range(1,len(supplier)+1):table.cell(row,1).text = supplier[row-2]table.cell(row,2).text = pn[row-2] doc.save("收貨記錄-合并單元格.docx")

為什么寫入合并單元格的時候,也是將合并之前的每個單元格都寫了一次(比如寫入“供應商HH”到第二行第1到6列的時候,寫入了6次),為什么不會造成重復內容呢?是因為每寫一次,就將原來的內容清空了。最終結果如下,目標達成!

如果您有需要處理的問題,可發郵件到我郵箱:donyo@qq.com,一起探討解決方案。

以上在Jupyter notebook上完成,所用到的代碼及Excel 資料已上傳GitHub及百度網盤, 歡迎下載到本地隨意玩。

Python版本:Python 3.6 64bit

操作系統:Windows 7

GitHub:Office_Automation_by_Using_Python

百度Pan:“pan.baidu”加上“.com/s/1WXcoYts_uNJmccfJ0lrmWg” 提取碼: kry7

WeiXin:Python操作Office軟件高效工作

總結

以上是生活随笔為你收集整理的element 表格单元格内容不换行_实例29_在Word表格中将上下行相同内容的单元格自动合并...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。