You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用docxtpl实现表格单元格的动态横向合并?

使用docxtpl结合python-docx实现表格横向合并相同内容单元格

解决方案思路

先通过docxtpl渲染出包含原始数据的基础表格,再利用python-docx的单元格合并API,遍历每行识别连续相同内容的单元格,完成横向合并操作。

步骤1:准备docx模板

创建名为template.docx的模板文件,表格结构需包含docxtpl循环语法以动态生成数据行:

| 序号 | 列1 | 列2 | 列3 |
{% for item in tbl_contents %}
| {{ item.label }} | {{ item.cols[0] }} | {{ item.cols[1] }} | {{ item.cols[2] }} |
{% endfor %}

步骤2:编写Python代码

from docxtpl import DocxTemplate
from docx import Document
from docx.enum.table import WD_ALIGN_VERTICAL

# 原始数据
context = {
    'tbl_contents': [
        {'label': '1', 'cols': ['A','A','B']},
        {'label': '2', 'cols': ['C', 'C', 'B']},
        {'label': '3', 'cols': ['A', 'E', 'D']}
    ]
}

# 1. 用docxtpl渲染基础表格
tpl = DocxTemplate('template.docx')
tpl.render(context)
tpl.save('temp.docx')

# 2. 用python-docx处理单元格合并
doc = Document('temp.docx')
table = doc.tables[0]  # 操作文档中的第一个表格

# 遍历数据行(跳过表头行)
for row in table.rows[1:]:
    # 从第二列开始处理(第一列为序号列)
    cells = row.cells[1:]
    i = 0
    while i < len(cells):
        current_text = cells[i].text.strip()
        # 统计连续相同内容的单元格数量
        merge_num = 1
        while i + merge_num < len(cells) and cells[i + merge_num].text.strip() == current_text:
            merge_num += 1
        
        if merge_num > 1:
            # 执行横向合并
            start_cell = cells[i]
            end_cell = cells[i + merge_num - 1]
            start_cell.merge(end_cell)
            # 调整单元格垂直居中(可选)
            start_cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
            # 拼接合并单元格的内容(匹配示例显示效果)
            start_cell.text = '   '.join([cells[j].text.strip() for j in range(i, i+merge_num)])
        
        i += merge_num

# 保存最终文档
doc.save('final.docx')

关键说明

  • docxtpl负责快速批量生成带原始数据的表格结构,简化动态内容渲染流程;
  • python-docx的cell.merge()方法是核心合并逻辑,需指定合并的起始和结束单元格;
  • 通过统计连续相同内容的单元格数量,批量处理合并操作,提升效率;
  • 合并后可按需调整单元格样式(如对齐方式)和内容格式,匹配需求显示效果。

内容的提问来源于stack exchange,提问作者user25169060

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:33:21