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

如何用Python按指定条件为file.xls的行添加颜色?

基于openpyxl实现Excel行上色的解决方案

核心思路

  • 加载目标Excel文件并定位工作表
  • 定义三种条件对应的单元格填充样式
  • 遍历数据行,提取freq、mutation、gene字段值
  • 按优先级判断条件(优先匹配list2,再匹配list1的频率区间),为符合条件的行应用对应颜色

完整代码实现

from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# ---------------------- 配置区域 ----------------------
# 替换为你的文件路径(注意:openpyxl仅支持.xlsx格式,xls需转成xlsx)
file_path = "file.xlsx"
# 替换为你的list1内容,格式:[(基因名, 突变类型), ...]
list1 = [("TP53", "p.R175H"), ("KRAS", "p.G12D")]
# 替换为你的list2内容,格式同上
list2 = [("EGFR", "p.L858R"), ("BRAF", "p.V600E")]
# 表头所在行号(默认第1行)
header_row = 1
# 各字段所在列(替换为实际列标识,比如"A"、"B")
gene_col = "A"
mutation_col = "B"
freq_col = "C"
# ---------------------- 样式定义 ----------------------
yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
blue_fill = PatternFill(start_color="0000FF", end_color="0000FF", fill_type="solid")

# ---------------------- 核心逻辑 ----------------------
# 加载工作簿
wb = load_workbook(file_path)
ws = wb.active  # 使用当前活动工作表,也可指定ws = wb["Sheet1"]

# 转换列标识为索引(适配Python从0开始的索引规则)
gene_col_idx = ws[gene_col][0].column - 1
mutation_col_idx = ws[mutation_col][0].column - 1
freq_col_idx = ws[freq_col][0].column - 1

# 遍历所有数据行(跳过表头)
for row in ws.iter_rows(min_row=header_row + 1):
    gene_val = row[gene_col_idx].value
    mutation_val = row[mutation_col_idx].value
    freq_val = row[freq_col_idx].value
    
    fill_style = None
    
    # 优先判断list2的匹配条件
    if (gene_val, mutation_val) in list2:
        fill_style = blue_fill
    else:
        # 判断list1的匹配条件
        if (gene_val, mutation_val) in list1:
            # 确保freq值为数字类型
            try:
                freq_num = float(freq_val)
                if 0.11 <= freq_num <= 0.5:
                    fill_style = yellow_fill
                elif 0.51 <= freq_num <= 1:
                    fill_style = red_fill
            except (ValueError, TypeError):
                # 若freq无法转成数字,跳过该行上色
                continue
    
    # 为整行应用填充样式
    if fill_style:
        for cell in row:
            cell.fill = fill_style

# 保存修改后的文件(建议另存为新文件,避免覆盖原数据)
wb.save("colored_file.xlsx")

关键注意事项

  • 文件格式:openpyxl仅支持.xlsx格式,如果你的原文件是.xls,需要先通过Excel另存为.xlsx格式再处理。
  • 列配置:务必根据你的实际Excel结构,修改gene_col、mutation_col、freq_col为对应字段所在的列标识。
  • 条件优先级:代码中优先匹配list2的规则,如果需要调整优先级(比如先匹配list1),只需调换条件判断的顺序。
  • 异常处理:针对freq值非数字的情况,代码会跳过该行上色,避免运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:40:35