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

如何在Pandas中基于其他单元格值格式化Excel单元格样式与内容?

问题修复方案

你的代码存在几个关键问题:

  • 仅定义了样式但未将其应用到实际写入Excel的流程中,df3.style.apply的结果没有被使用
  • 未修改Status列的内容为RED
  • 样式的作用目标是BCQA (F)列,而非需求中的Status列

以下是修复后的完整代码:

from openpyxl import load_workbook
from openpyxl.styles import PatternFill
from openpyxl.utils.dataframe import dataframe_to_rows

# 1. 先修改DataFrame的Status列内容
df3['Status'] = df3.apply(lambda row: 'RED' if row['BCQA (F)'] == 'NO DATES' else row['Status'], axis=1)

# 2. 加载工作簿并创建新工作表
wb = load_workbook('Swap status.xlsx')
ws = wb.create_sheet("ST_291123")

# 3. 将DataFrame数据写入工作表
for r in dataframe_to_rows(df3, index=False, header=True):
    ws.append(r)

# 4. 定义红色填充样式
red_fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')

# 5. 遍历行,设置Status列的背景色
# 获取Status列的列号(表头在第1行)
status_col = None
bcqa_col = None
# 先遍历表头找到两列的位置
for col in ws.iter_cols(min_row=1, max_row=1):
    cell = col[0]
    if cell.value == 'Status':
        status_col = cell.column_letter
    elif cell.value == 'BCQA (F)':
        bcqa_col = cell.column_letter

# 从第2行开始遍历数据行
for row_num in range(2, ws.max_row + 1):
    bcqa_value = ws[f"{bcqa_col}{row_num}"].value
    if bcqa_value == 'NO DATES':
        ws[f"{status_col}{row_num}"].fill = red_fill

# 6. 保存工作簿
wb.save('Swap status.xlsx')

关键说明:

  • 先通过apply修改Status列的内容,满足"内容改为RED"的需求
  • 使用openpyxl的PatternFill来设置单元格背景色,适配在已加载工作簿中修改格式的场景
  • 先写入所有数据,再通过表头定位列位置,遍历行判断并设置样式,确保逻辑准确
  • 列位置通过表头查找,避免硬编码列号导致的适配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:07