如何用python-docx库合并Word表格同列重复内容的单元格?
使用python-docx合并同列相邻相同内容的单元格
要实现同列中与上一行内容相同的单元格合并,并移除重复值,可以通过按列遍历表格、跟踪相同内容块、调用单元格合并方法来完成。以下是具体实现方案:
完整代码实现
from docx import Document from docx.enum.table import WD_ALIGN_VERTICAL def merge_same_cells_in_columns(table): row_count = len(table.rows) col_count = len(table.columns) for col_idx in range(col_count): prev_text = None start_row = 0 for row_idx in range(1, row_count): curr_cell = table.cell(row_idx, col_idx) curr_text = curr_cell.text.strip() # 触发合并的条件:内容不同 或 到达最后一行 if curr_text != prev_text or row_idx == row_count - 1: end_row = row_idx - 1 if curr_text != prev_text else row_idx # 只有当相同内容块超过1行时才执行合并 if end_row > start_row: start_cell = table.cell(start_row, col_idx) end_cell = table.cell(end_row, col_idx) start_cell.merge(end_cell) # 合并后设置垂直居中,优化显示效果 start_cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER # 更新跟踪的起始行和参考文本 start_row = row_idx prev_text = curr_text else: # 清空当前单元格的重复内容 curr_cell.text = "" # 示例调用 if __name__ == "__main__": # 读取已有文档中的表格 doc = Document("your_document.docx") target_table = doc.tables[0] # 取第一个表格,可根据需求调整索引 # 执行合并操作 merge_same_cells_in_columns(target_table) # 保存处理后的文档 doc.save("merged_document.docx")
核心逻辑说明
- 按列遍历:先循环表格的每一列,再逐行比较当前单元格与上一行的内容
- 跟踪相同内容块:用
start_row记录当前相同内容的起始行,prev_text存储上一行的内容作为参考 - 合并单元格:当遇到不同内容或表格最后一行时,合并从
start_row到当前内容块末尾的单元格 - 移除重复值:在发现当前单元格与上一行内容相同时,直接清空当前单元格的文本,确保合并后仅保留第一个单元格的内容
注意事项
- 若单元格包含富文本格式(如加粗、换行),需调整内容比对逻辑(比如直接用
curr_cell.text而非strip()后的内容) - 若表格已有合并单元格,需先处理原有合并结构,避免出现合并异常
- 操作前建议备份原文档,防止数据丢失
内容的提问来源于stack exchange,提问作者Comrade Che
相关产品推荐
相关产品推荐

