在WORD中通过鼠标右键菜单“插入”按钮中的功能可以实现表格行列的添加,也可以通过“删除单元格”按钮中的删除单元格的功能实现表格行列的删除;当然还可以通过“布局”菜单中的删除和添加功能实现。
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNS5iYWlkdS5jb20vZmVlZC8wNjA4MjgzODFmMzBlOTI0MmU1NzlhNjE4N2U5ZTkwMDFmOTVmN2QzLmpwZWc%2FdG9rZW49NGZhMGM2MzA3YTZhODI3ODBiNjZjZTFkYzY5MWUxZjU%3D.jpeg?token=4fa0c6307a6a82780b66ce1dc691e1f5?w=700&webp=1)
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNi5iYWlkdS5jb20vZmVlZC8xOGQ4YmMzZWIxMzUzM2ZhMDgxNzc1NzQ2MzMyN2ExOTQwMzQ1YjJiLmpwZWc%2FdG9rZW49OGQ4Mjc2YzY3ZWNmMWQzNzU0NDViOTk5N2RiNWIwYTI%3D.jpeg?token=8d8276c67ecf1d375445b9997db5b0a2?w=700&webp=1)
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzMC5iYWlkdS5jb20vZmVlZC9mYWYyYjIxMTkzMTNiMDdlY2U1Yzc0MzJjNjM2MTYyNTk2ZGQ4YzBhLmpwZWc%2FdG9rZW49ODY3NDFlNzZhN2UwZmEzZGJjNWJkZjRkNDQ3MjdmN2U%3D.jpeg?token=86741e76a7e0fa3dbc5bdf4d44727f7e?w=700&webp=1)
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNS5iYWlkdS5jb20vZmVlZC8wNjA4MjgzODFmMzBlOTI0NTViZTc0MDA4NmU5ZTkwMDFjOTVmN2Q2LmpwZWc%2FdG9rZW49NDExZTFlZTJkYjgzNjQxMzIzOGNjYmY4ZTFiYzU5NWQ%3D.jpeg?token=411e1ee2db836413238ccbf8e1bc595d?w=700&webp=1)
而在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\') # 保存文档添加行、列后运行结果见下图:
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzMy5iYWlkdS5jb20vZmVlZC9mM2QzNTcyYzExZGZhOWVjOGY3OGIxOWZhOTMxNzAwNTkzOGZjMWM4LmpwZWc%2FdG9rZW49MzhjYjFiMzllMzAwZDJlYjY0NDMwNGJiMWRjYzZjNGE%3D.jpeg?token=38cb1b39e300d2eb644304bb1dcc6c4a?w=700&webp=1)
输出的文档结果见下图
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNS5iYWlkdS5jb20vZmVlZC9hYzZlZGRjNDUxZGE4MWNiZTQyOTFkN2M5ODg3NTcxMDBiMjQzMTk4LmpwZWc%2FdG9rZW49MjgyMzAyYTcwZjZjMjc5YmZhZWE3OTk4MDYyNjJjMTU%3D.jpeg?token=282302a70f6c279bfaea799806262c15?w=700&webp=1)
表格中add_row()函数默认添加在表格的底部,而add_column()函数默认添加到列最右侧。
02表格行、列的定位
在python-docx中表格中行或者列的定位主要通过
table.rows和table.columns两个属性获取行和列的的总对象,然后使用索引获取指定的行或者列对象。获取表格中的第2行和第2列代码如下:
row = table.rows[1]column = table.columns[1]
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNS5iYWlkdS5jb20vZmVlZC85MzQ1ZDY4OGQ0M2Y4Nzk0NGQxOWViNjYxOGZhODlmMjE5ZDUzYWY4LmpwZWc%2FdG9rZW49NTYzN2UyNTNlOTkwMzZmNDg3NzBkOTQwYTkyZjljNzA%3D.jpeg?token=5637e253e99036f48770d940a92f9c70?w=700&webp=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))运行结果如下图:
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzMy5iYWlkdS5jb20vZmVlZC9mYWYyYjIxMTkzMTNiMDdlM2NkZTdhODNjNjM2MTYyNTk1ZGQ4Y2M2LmpwZWc%2FdG9rZW49ZjVmZTBkOWM3MDcyYWE1ZGMwODMzYzNkNGU1MzMzNzY%3D.jpeg?token=f5fe0d9c7072aa5dc0833c3d4e533376?w=700&webp=1)
删除第2行后表格的效果如下图:
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNC5iYWlkdS5jb20vZmVlZC9jODNkNzBjZjNiYzc5ZjNkODkyYTJlMWI3MDQwNGExNzczOGIyOTNlLmpwZWc%2FdG9rZW49NjBjZmZhNDRlYTM1NzZlOGJkYTZjZTY0NzA2MzQ5YjE%3D.jpeg?token=60cffa44ea3576e8bda6ce64706349b1?w=700&webp=1)
删除表格中的列
列的删除则不能像删除行那样使用对应的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列后运行结果如下图:
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNS5iYWlkdS5jb20vZmVlZC8zN2QxMmYyZWI5Mzg5YjUwNDU1OGZkOGQ0ZWQ0NjJkYmU1MTE2ZWI1LmpwZWc%2FdG9rZW49MWQ0NzE2YTUzYjI4YmE4NTM0ZjI2YTU1M2MxMjAyNTI%3D.jpeg?token=1d4716a53b28ba8534f26a553c120252?w=700&webp=1)
删除第2列后表格见下图
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzMi5iYWlkdS5jb20vZmVlZC9kMDU4Y2NiZjZjODE4MDBhOTU1ZTcxYjg3YWQ0YjRmYzgzOGI0NzMxLmpwZWc%2FdG9rZW49ZWI1MGU3YmY5NDc2NTRlODBkODE5NTViY2FjY2UwMGY%3D.jpeg?token=eb50e7bf947654e80d81955bcacce00f?w=700&webp=1)
通过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) # 打印单元格中的内容运行结果入下图
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzNy5iYWlkdS5jb20vZmVlZC8wZGQ3OTEyMzk3ZGRhMTQ0MGNjYjIwZjk3OTU2NTdhNDBlZjQ4NmE3LmpwZWc%2FdG9rZW49MWQwZmE5YzVjYzVkMmMzYjc2MTIyY2Q1YTA4MzI2NTM%3D.jpeg?token=1d0fa9c5cc5d2c3b76122cd5a0832653?w=700&webp=1)
表格仍然按照每行3个元素存储,表格仍然是3行3列,但第3行是空行。笔者从表格行列的添加、定位和删除等3个部分总结了python-docx包中对WORD文档表格行列的操作并制作了思维导图见下图,希望为使用python-docx包对表格行列操作有需求的人提供参考,本文中如有不妥之处,请在评论中指出。
![](https://image.shishitao.com:8440/aHR0cHM6Ly9waWNzMC5iYWlkdS5jb20vZmVlZC85NjBhMzA0ZTI1MWY5NWNhZjA0NTllMWMxZWY2ZjgzODY1MDk1MmNiLmpwZWc%2FdG9rZW49NjM3OTg0ZTBlZWM3NGMzYjgyMTdjMTRhOTVjYzFhNDQ%3D.jpeg?token=637984e0eec74c3b8217c14a95cc1a44?w=700&webp=1)