在WORD中通过鼠标右键菜单“插入”按钮中的功能可以实现表格行列的添加,也可以通过“删除单元格”按钮中的删除单元格的功能实现表格行列的删除;当然还可以通过“布局”菜单中的删除和添加功能实现。
鼠标右键插入按钮 鼠标右键删除单元格按钮 删除单元格功能图 在布局菜单上删除和添加表格行列 而在python-docx包中怎么实现表格行和列的添加和删除?笔者总结了add_column()函数、add_row()函数和remove()函数的用法,分别从如下3个部分进行说明,并将本文的主要内容制作了思维导图。
默认位置添加
在表格中使用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()函数默认添加到列最右侧。
在python-docx中表格中行或者列的定位主要通过
table.rows和table.columns两个属性获取行和列的的总对象,然后使用索引获取指定的行或者列对象。获取表格中的第2行和第2列代码如下:
row = table.rows[1]column = table.columns[1]
表格、行、单元格的关系 在表格中虽然单元格可以从column中的cells中来遍历,但是单元格是按行存储的,这点将在删除列的部分重点说明。
删除表格中的行
表格中行的删除可以使用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行的运行结果 删除第2行后表格的效果如下图:
删除第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中的第二列运行结果 删除第2列后表格见下图
删除表格2中的第二列WORD文档效果图 通过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包对表格行列操作有需求的人提供参考,本文中如有不妥之处,请在评论中指出。
python-docx添加表格行和列