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

如何用Python实现基于ID的Excel相邻单元格对比与高亮?

实现方案

我们可以用openpyxl库完成这个需求,它支持Excel文件的读写和单元格样式设置。

1. 安装依赖库

首先安装所需的库:

pip install openpyxl

2. 完整代码

from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 定义填充样式
green_fill = PatternFill(start_color='00FF00', end_color='00FF00', fill_type='solid')
red_fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')
yellow_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')

# 加载Excel文件,替换为你的实际文件路径
wb = load_workbook('input.xlsx')
ws = wb.active  # 选择活动工作表,也可通过wb['Sheet1']指定具体工作表

# 假设第一行是表头,从第二行开始遍历数据行
for row in ws.iter_rows(min_row=2):
    has_red = False
    has_yellow = False

    # 处理C列(index=2)与D列(index=3)
    val_c = row[2].value
    val_d = row[3].value
    if val_c in (None, '') or val_d in (None, ''):
        row[2].fill = yellow_fill
        row[3].fill = yellow_fill
        has_yellow = True
    else:
        if val_c == val_d:
            row[2].fill = green_fill
            row[3].fill = green_fill
        else:
            row[2].fill = red_fill
            row[3].fill = red_fill
            has_red = True

    # 处理E列(index=4)与F列(index=5)
    val_e = row[4].value
    val_f = row[5].value
    if val_e in (None, '') or val_f in (None, ''):
        row[4].fill = yellow_fill
        row[5].fill = yellow_fill
        has_yellow = True
    else:
        if val_e == val_f:
            row[4].fill = green_fill
            row[5].fill = green_fill
        else:
            row[4].fill = red_fill
            row[5].fill = red_fill
            has_red = True

    # 处理G列(index=6)与H列(index=7)
    val_g = row[6].value
    val_h = row[7].value
    if val_g in (None, '') or val_h in (None, ''):
        row[6].fill = yellow_fill
        row[7].fill = yellow_fill
        has_yellow = True
    else:
        if val_g == val_h:
            row[6].fill = green_fill
            row[7].fill = green_fill
        else:
            row[6].fill = red_fill
            row[7].fill = red_fill
            has_red = True

    # 写入Result列(假设为I列,index=8)
    if has_red:
        result_val = "不匹配"
    elif has_yellow:
        result_val = "不可比较"
    else:
        result_val = "匹配"
    row[8].value = result_val

# 保存结果到新文件,避免覆盖原文件
wb.save('output.xlsx')

3. 代码说明

  • 样式定义:提前创建三种填充样式,分别对应内容相等(绿色)、内容不等(红色)、任一单元格为空(黄色)的场景。
  • 行遍历:从第二行开始遍历数据行(默认第一行是表头),若你的表头行数不同,调整min_row参数即可。
  • 单元格组对比:对每一组相邻单元格依次判断:
    • 任一单元格为空:标记为黄色,同步记录has_yellow状态。
    • 内容相等:标记为绿色。
    • 内容不等:标记为红色,同步记录has_red状态。
  • Result列判定:按优先级输出结果:
    1. 存在红色单元格 → "不匹配"
    2. 无红色但有黄色 → "不可比较"
    3. 全为绿色 → "匹配"
  • 文件保存:将结果写入新文件,防止修改原文件数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:55:37