在WORD中通過鼠標右鍵菜單“插入”按鈕中的功能可以實現表格行列的添加,也可以通過“刪除單元格”按鈕中的刪除單元格的功能實現表格行列的刪除;當然還可以通過“布局”菜單中的刪除和添加功能實現。




而在python-docx包中怎么實現表格行和列的添加和刪除?筆者總結了add_column()函數、add_row()函數和remove()函數的用法,分別從如下3個部分進行說明,並將本文的主要內容制作了思維導圖。
01表格中添加行、列
默認位置添加
在表格中使用add_column(width)和add_row()可以實現對行和列的添加,其中add_row方法沒有參數,而add_column方法必須知道表格中的寬度,寬度可以使用單位換算如Cm ,Inches等。添加代碼如下:
from docx import Documentfrom docx.shared import Cmdocument = Document('test.docx') # 打開文檔print('test.docx表格總數:', len(document.tables))table = document.tables[1] # 獲取第二個表格對象print('表格2的行列數:', len(table.rows), len(table.columns)) # 打印表格的行列數table.add_row() # 為表格最底部增加一行table.add_column(Cm(3)) # 為表格最右側增加一列print('添加行列后表格2的行列數:', len(table.rows), len(table.columns))document.save('test2.docx') # 保存文檔添加行、列后運行結果見下圖:

輸出的文檔結果見下圖

表格中add_row()函數默認添加在表格的底部,而add_column()函數默認添加到列最右側。
02表格行、列的定位
在python-docx中表格中行或者列的定位主要通過
table.rows和table.columns兩個屬性獲取行和列的的總對象,然后使用索引獲取指定的行或者列對象。獲取表格中的第2行和第2列代碼如下:
row = table.rows[1]column = table.columns[1]

在表格中雖然單元格可以從column中的cells中來遍歷,但是單元格是按行存儲的,這點將在刪除列的部分重點說明。
03刪除表格中的行、列
刪除表格中的行
表格中行的刪除可以使用row._element.getparent().remove()函數來實現。具體步驟是,首先獲取表格中的行對象,然后使用remove()函數進行刪除。刪除test.docx中表格2中的第2行,代碼如下:
document = Document('test.docx') # 打開docx文檔print('test.docx表格總數:', len(document.tables)) # 打印表格總數table = document.tables[1] # 獲取第二個表格對象,用於刪除表格中的行print('表格2的行列數:', len(table.rows), len(table.columns)) # 打印表格的行列數,刪除表格行前row = table.rows[1] # 獲取表格2中第二行row._element.getparent().remove(row._element) # 刪除表格中的第二行print('刪除表格中第2行后的表格行列數:', len(table.rows), len(table.columns))運行結果如下圖:

刪除第2行后表格的效果如下圖:

刪除表格中的列
列的刪除則不能像刪除行那樣使用對應的remove()函數,因為在_Column中沒有定義_element,但可以采用單元格進行刪除。代碼如下:
document = Document('test.docx') # 打開docx文檔,用於刪除表格列print('test.docx表格總數:', len(document.tables)) # 打印docx文件中表格總數table = document.tables[1] # 獲取第二個表格對象,用於刪除表格中的列print('表格2的行列數:', len(table.rows), len(table.columns)) # 打印表格2的行列數column = table.columns[1] # 獲取表格2中第2列for cell in column.cells: # 遍歷列中單元格cell._element.getparent().remove(cell._element) # 刪除第2列的單元格print('刪除第2列后的表格行列數:', len(table.rows), len(table.columns))document.save('test2.docx') # 保存文檔,刪除列后刪除表格第2列后運行結果如下圖:

刪除第2列后表格見下圖

通過cell的remove()方法可以刪除表格的列,但是由於表格中的cell是按行存儲,每行存儲的cell的數量並沒有變化,所以當刪除單元格后,后續的單元格會補上。那么此時表格的存儲形式將不是WORD文檔表現出的效果,讀取test2.docx中的表格2代碼如下:
document = Document('test2.docx') # 打開文檔table = document.tables[1] # 獲取第二個表格對象,用於讀取單元格內容i = 0 # 標識行的序號for row in table.rows: # 讀取表格中的行i = i + 1 # 行的序號從1開始for cell in row.cells: # 讀取行中的單元格print('第' + str(i)+'行:', cell.text) # 打印單元格中的內容運行結果入下圖

表格仍然按照每行3個元素存儲,表格仍然是3行3列,但第3行是空行。筆者從表格行列的添加、定位和刪除等3個部分總結了python-docx包中對WORD文檔表格行列的操作並制作了思維導圖見下圖,希望為使用python-docx包對表格行列操作有需求的人提供參考,本文中如有不妥之處,請在評論中指出。
