目录

解决 python-docx 获取合并单元格导致数据重复的问题

问题说明

python-docx 模块读取 docx 表格,导致提取出来的内容重复,按列合并或按行合并都会导致重复。

例如读取下面表格第 3 列的数据。 /images/python-docx-image01.png

1
2
3
4
5
from docx import Document
doc = Document('test.docx')
table0 = doc.tables[0]
for cell in table0.columns[len(table0.columns) - 1].cells:
   print(cell.text)

输出结果: /images/python-docx-image02.png

解决思路

利用合并的每个单元内存地址是一样的原理,排除掉内存地址一样的单元格里的数据,剩下的就是要获取的数据。

1
2
3
4
5
6
from docx import Document
 
doc = Document('test.docx')
table0 = doc.tables[0]
for cell in table0.columns[len(table0.columns) - 1].cells:
   print('单元格内容:', cell.text, '内存地址:', cell._tc)

输出结果: /images/python-docx-image03.png

从输出结果中可以看到,合并后的单元格地址是一样的。

解决办法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from docx import Document
 
doc = Document('test.docx')
table0 = doc.tables[0]
cell_set = set()

for cell in table0.columns[len(table0.columns) - 1].cells:
    if cell._tc not in cell_set:
        cell_set.add(cell._tc)
        print(cell.text)

输出结果: /images/python-docx-image04.png 新建一个集合,排除掉内存地址一样的数据,剩下就是合并后的数据。