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

如何使用xlwings对比Excel工作表行并执行新增与strikethrough操作

用xlwings实现Excel工作表数据同步与格式设置

核心思路

先提取两个工作表中AVLevel和Description的组合键,通过对比两组组合键,分别处理两种场景:

  • 将Sheet B独有的组合数据插入Sheet A末尾
  • 给Sheet A独有的组合数据所在行添加删除线格式

实现代码

import xlwings as xw

# 替换为你的Excel文件路径
file_path = "你的文件路径.xlsx"

with xw.Book(file_path) as wb:
    sheet_a = wb.sheets["Sheet A"]
    sheet_b = wb.sheets["Sheet B"]

    # 获取Sheet A的数据范围(假设表头在第1行,数据从第2行开始)
    a_data = sheet_a.used_range.value
    # 提取Sheet A的(AVLevel+Description)组合键,同时记录对应的Excel行号
    a_combinations = {}
    for row_idx in range(1, len(a_data)):  # 跳过表头行(索引0)
        av_level = a_data[row_idx][0]  # 假设AVLevel在第1列(Python索引0)
        desc = a_data[row_idx][1]      # 假设Description在第2列(Python索引1)
        if av_level and desc:  # 跳过空行
            combo = f"{av_level}_{desc}"
            a_combinations[combo] = row_idx + 1  # 转换为Excel实际行号(从1开始)

    # 获取Sheet B的数据范围,提取组合键集合
    b_data = sheet_b.used_range.value
    b_combinations = set()
    for row_idx in range(1, len(b_data)):
        av_level = b_data[row_idx][0]
        desc = b_data[row_idx][1]
        if av_level and desc:
            combo = f"{av_level}_{desc}"
            b_combinations.add(combo)

    # 处理场景1:Sheet B有但Sheet A没有的组合,插入Sheet A末尾
    last_row_a = sheet_a.used_range.last_cell.row
    for row_idx in range(1, len(b_data)):
        av_level = b_data[row_idx][0]
        desc = b_data[row_idx][1]
        if av_level and desc:
            combo = f"{av_level}_{desc}"
            if combo not in a_combinations:
                last_row_a += 1
                # 复制Sheet B当前行的内容和格式到Sheet A新行
                sheet_b.range(row_idx+1, 1).expand("right").copy(sheet_a.range(last_row_a, 1))

    # 处理场景2:Sheet A有但Sheet B没有的组合,给该行加删除线
    for combo, row_num in a_combinations.items():
        if combo not in b_combinations:
            # 给整行有效数据添加删除线格式,不破坏原有格式
            sheet_a.range(row_num, 1).expand("right").api.Font.Strikethrough = True

    # 保存修改
    wb.save()

关键细节说明

  • 列索引调整:代码中默认AVLevel在第1列、Description在第2列,若你的表格列位置不同,需修改对应索引值。
  • 格式保留:插入新行时直接复制Sheet B行的内容和格式;设置删除线仅修改字体属性,不影响单元格原有填充、边框等格式。
  • 空行过滤:跳过AVLevel或Description为空的行,避免无效对比。
  • 行号转换:注意Python列表索引(从0开始)和Excel行号(从1开始)的对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:12:15