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

如何按指定多条件遍历Excel文件并修正单元格着色逻辑

修正openpyxl处理Excel的条件判断逻辑

先给出完整的修正代码,再拆解关键逻辑:

from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 加载目标Excel文件
wb = load_workbook("your_file.xlsx")
ws = wb.active  # 获取活动工作表,也可通过wb["指定工作表名"]精准选择

# 预定义填充样式
orange_fill = PatternFill(start_color="FFA500", end_color="FFA500", fill_type="solid")
dark_red_fill = PatternFill(start_color="8B0000", end_color="8B0000", fill_type="solid")

# 遍历行(示例从第2行开始跳过表头,无表头则改为range(1, ws.max_row+1))
for row in range(2, ws.max_row + 1):
    cell_b = ws[f"B{row}"]
    cell_c = ws[f"C{row}"]
    
    # 精准判断单元格是否有有效数据(排除空值、纯空格)
    b_has_data = bool(cell_b.value and str(cell_b.value).strip())
    c_has_data = bool(cell_c.value and str(cell_c.value).strip())
    
    # 1. B、C列均有数据,打印该行内容
    if b_has_data and c_has_data:
        print(f"第{row}行: B列={cell_b.value}, C列={cell_c.value}")
    
    # 2. B列有数据、C列无数据,给C列填充橙色
    elif b_has_data and not c_has_data:
        cell_c.fill = orange_fill
    
    # 3. C列有数据、B列无数据,给B列填充橙色
    elif c_has_data and not b_has_data:
        cell_b.fill = orange_fill
    
    # 4. B、C列均无数据,两列都填充深红色
    else:
        cell_b.fill = dark_red_fill
        cell_c.fill = dark_red_fill

# 保存修改后的文件
wb.save("modified_file.xlsx")

核心修正说明:

  • 空值判断优化:用bool(cell.value and str(cell.value).strip())过滤空值、纯空格的情况,确保判断的是"有效数据"而非格式上的非空单元格。
  • 条件顺序调整:按需求优先级依次判断,先处理"都有数据"的场景,再分支处理"一有一无"的情况,最后覆盖"都无数据"的场景,避免逻辑冲突。
  • 样式复用:提前定义填充样式对象,避免循环内重复创建,提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:39:59