python-docx
提供了对Word文档的读取和写入功能,包括对表格的操作。下面是一个示例代码,演示如何遍历Word文档中的表格,包括处理合并单元格的情况:
from docx import Document
from docx.oxml.ns import qn
def visit_cells_in_row(row):
"""遍历表格行中的所有单元格,包括处理合并单元格的情况"""
cells = row.cells
for cell in cells:
# 访问当前单元格的内容
print(cell.text)
# 检查是否有合并的单元格
merged = cell._element.xpath(f'.//{qn("w:tcPr")}//*[@{qn("w:vMerge")}="rest"]')
if merged:
# 如果有合并的单元格,跳过它们,因为它们已经在当前单元格中处理
continue
def visit_table(table):
"""遍历Word文档中的表格"""
for row in table.rows:
visit_cells_in_row(row)
def process_docx(file_path):
"""处理Word文档,遍历所有表格"""
doc = Document(file_path)
for table in doc.tables:
visit_table(table)
# 调用函数处理Word文档
process_docx('example.docx')
这段代码定义了三个函数:
-
visit_cells_in_row(row)
:这个函数接受一个表格行对象作为参数,遍历该行中的所有单元格。它还检查每个单元格是否有合并属性(w:vMerge="rest"
),如果有,则跳过该单元格,因为其内容已经在上一个单元格中处理过。 -
visit_table(table)
:这个函数接受一个表格对象作为参数,遍历表格中的所有行,并调用visit_cells_in_row
函数来处理每一行。 -
process_docx(file_path)
:这个函数接受Word文档的文件路径作为参数,加载文档,并遍历文档中的所有表格,对每个表格调用visit_table
函数。
请注意,这段代码假设Word文档使用的是python-docx
库支持的格式。如果Word文档中的表格结构非常复杂或使用了特殊的格式,可能需要对代码进行相应的调整。此外,python-docx
库在处理非常大的文档或复杂的表格结构时可能会遇到性能问题。