python-docx添加和删除表格行、列

在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行的运行结果

删除第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添加表格行和列
posted @ 2020-06-06 22:32  天涯海角路  阅读(8423)  评论(0编辑  收藏  举报