在使用Python-docx包对表格进行数据的录入,通常采用如下几种方式。
01设置单元格的值
表格中单元格的值有两种赋值方式,一种是直接为cell.text属性赋值来实现,另外一种是通过获取或者添加单元格中的段落,然后使用段落中的text属性赋值实现,代码如下:
from docx import Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 导入段落对齐方式document = Document()table = document.add_table(2, 4) # 为文档新增2行4列的表格table.cell(0, 0).text = '值1' # 为表格的(0,0)位置单元格赋值paragraph = table.cell(0, 1).paragraphs[0] # 获取表格(0,1)位置单元格中的段落paragraph.text = '值2'paragraph = table.cell(0, 1).add_paragraph('第二个段落居中', style=None)paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置段落居中单元格赋值效果见下图
单元格值设置的2种方式
第一种赋值方式,只能更改单元格的值,无法设置单元格中数据的样式,并且整个单元格只能是一个段落;而第二种赋值方式,使用了段落,在单元格赋值的基础上还能增加新的段落,并设置段落的样式和字体的样式。具体段落的使用方法可以参考文章python-docx段落设置
02一般录入方式
在表格中使用table.cell(col_index, row_indelx)来定位单元格,使用cell.text属性设置单元格的值。新建表格并将第一行设置为表头,从第二行开始作为数据的开始行,代码如下:
from docx import Document # 导入docx包document = Document() # 新建docx文档table = document.add_table(2, 4)table.cell(0, 0).text = '序号'table.cell(0, 1).text = '姓名'table.cell(0, 2).text = '年龄'table.cell(0, 3).text = '身高'# 表格赋值,将第二行作为数据输入第一行table.cell(1, 0).text = '1'table.cell(1, 1).text = '张三'table.cell(1, 2).text = '20'table.cell(1, 3).text = '174'document.save('test.docx')cell添加表格的效果图如下:
使用table.cell添加数据
这种录入方式要为每个单元格单独写入使用代码,适合对表格数据样式重复性低的情形,代码量大,可移植性差。
03按行录入
这种方式将数据的录入以行为单位进行录入。在对数据录入时,先获取行中cells对象,遍历每个cell,并通过cell.text赋值,录入数据。代码如下:
data = [['序号', '姓名', '年龄', '身高'], ['1', '张三', '20', '174'], ['2', '李四', '19', '167']]document = Document() # 新建docx文档table = document.add_table(3, 4)#表头table_header = table.rows[0].cellsfor col_i in range(4):table_header[col_i].text = data[0][col_i]# 录入数据for row_i in range(1, 3):table_data = table.rows[row_i].cellsfor col_i in range(4): # 遍历列table_data[col_i].text = data[row_i][col_i]按行录入数据效果如下:图2
按行录入数据
表中的数据以list类型存储,通过for循环按行遍历每个单元格,为每个单元格赋值。同02节录入数据方式相比,这种录入数据方式可移植性强,使用简便。
04删除单元格数据
单元格数据的删除从本质上来说同赋值是一样的,只不过赋值为空字符串,即''。同样也有两种方式来实现删除单元格数据,一种是直接cell.text赋值为'',另外一种能是使用段落,将段落的text属性赋值为''。单元格数据删除代码如下:
document = Document('test2.docx') # 读取test.docxtable = document.tables[0] # 读取第1个表格table.cell(0, 0).text = '' # 将(0,1)位置的单元格赋值为''paragraph = table.cell(0, 1).paragraphs[0].text = '' # 将(0,1)位置的单元格赋值为''document.save('test3.docx')删除单元格数据的效果图如下:
单元格数据删除的2种方式
第一种方式删除后的单元格无法保留样式,而第二种删除方式保留了段落的样式。
05删除表格行数据
python-docx中没有删除一整行数据的方法,不过可以通过遍历行内的cell,然后利用删除行内所有单元格的方法来实现。代码如下:
for cell in table.rows[1].cells: 遍历表格中第2行中所有的单元格cell.text = '' # 删除行的值删除第2行后的效果见下图
删除第2行中的值
06删除表格列数据
删除表格类的数据同删除行的数据是相似的,python-docx包中也没有删除整列值的方法。具体删除代码如下:
for cell in table.columns[1].cells: 遍历表格中第2列中所有的单元格cell.text = '' # 删除列的值删除第2列后的效果图
删除表格中的第2列的值
笔者将设置单元格的值、一般录入数据方式、按行录入数据方式、删除单元格数据、删除行数据和删除表格列数据等6个部分的内容制作了思维导图,见下图。为使用python-docx包录入和删除表格数据提供参考。
python-docx录入和删除表格数据