【Python COM】Word 自动纵向合并相同内容单元格

背景

docxtempl 库不支持动态纵向合并单元格,所以写了这段代码用来曲线救国。

使用方法

需要纵向合并的单元格加上在文本末尾加上“【纵向合并】”,然后调用此函数,就会自动纵向合并相同内容的单元格。

代码

需要安装 pywin32 库。
有一定概率会出现各种 pywintypes.com_err,一般再多试几次就能解决,原因不太清楚。

比较坑的一点是,如果表格里有合并的单元格,那么直接按行/列遍历会出错,因为被合并的单元格里除了第一个单元格之外,其他的单元格都被删掉了。微软也没给出什么 API 能判断单元格是否存在,只能用 try-catch 了。

def post_render(doc_path):
    def merge(cells: list):
        merge_cells.reverse()
        cell = merge_cells.pop()
        while merge_cells:
            cell.Merge(merge_cells.pop())

    word_app = win32com.client.Dispatch("Word.Application")
    word_app.Visible = True

    doc = word_app.Documents.Open(doc_path)
    tables = doc.Tables
    for table in tables:
        sleep(0.1)
        row_count = table.Rows.Count
        sleep(0.1)
        column_count = table.Columns.Count
        # 遍历每一列
        for column_index in range(1, column_count+1):
            merge_cells = []
            merge_content = ''
            for row_index in range(1, row_count+1):
                # 由于这一行可能由于合并单元格而不存在,所以需要加 try-catch 测试
                try:
                    cell = table.Cell(row_index, column_index)
                    text: str = cell.Range.Text
                except:
                    continue
                if '【纵向合并】' in text:
                    text = text.replace('【纵向合并】', '').strip()
                    text = text.replace('\r\x07', '') # 移除换行符,避免出现多余的空行
                    cell.Range.Text = text
                    if merge_content == text:
                        table.Cell(row_index, column_index).Range.Text = ''
                        merge_cells.append(cell)
                    else:
                        if len(merge_cells) > 1:
                            merge(merge_cells)
                        cell = table.Cell(row_index, column_index) # 合并单元格后原来的 Cell 会被删除,需要重新取
                        merge_content = text
                        merge_cells.clear()
                        merge_cells.append(cell)
            if len(merge_cells) > 1:
                merge(merge_cells)
    doc.Save()
    doc.Close()
    # 按需调用 word_app.Quit()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本源码是一个使用Python编写的自动化办公工具,旨在帮助用户在Excel表格中自动合并具有相同内容的相邻单元格。通过使用这个工具,用户可以节省大量的时间和精力,提高工作效率。该工具的核心功能是遍历Excel表格中的每个单元格,检查其上下左右相邻的单元格是否具有相同内容。如果发现相邻单元格内容相同,则将这些单元格合并为一个更大的单元格。这样,用户可以更清晰地查看和分析数据,而不会被重复的信息干扰。此外,该工具还提供了一些其他实用的功能,如:支持多种文件格式:除了常见的Excel文件(如.xlsx和.xls),该工具还支持其他表格文件格式,如CSV和TSV。自定义合并规则:用户可以根据需要设置合并规则,例如只合并特定的列或行,或者根据特定的条件进行合并。批量处理:该工具可以一次性处理多个文件,方便用户对大量数据进行处理。保存和导出:处理完成后,用户可以将结果保存到原始文件中,或者导出为新的Excel文件。简单易用的界面:该工具提供了一个简洁的图形用户界面,用户只需点击几下鼠标即可完成操作。总之,这个Python自动化办公源码是一个非常实用的工具,可以帮助用户快速高效地处理Excel表格中的数据。无论是需要进行数据分析的专业人士,还是需要处理大量表格数据的行政人员,这个工具都能为他们提供极大的便利。重新回答||
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值