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

如何在Pandas中筛选Excel特定颜色单元格(含StyleFrame不支持的颜色)

解决Excel特定颜色单元格筛选问题

先确认目标颜色的正确十六进制代码

首先需要准确获取你要筛选的蓝色单元格的实际RGB十六进制值,因为Excel的自定义颜色/主题色可能和StyleFrame utils里的基础色不匹配。可以用openpyxl先读取一个目标单元格的颜色:

from openpyxl import load_workbook

wb = load_workbook('TimeTable, FSC, Fall-2022.xlsx')
ws = wb['Monday']

# 替换成你实际的目标蓝色单元格位置,比如A1
cell = ws['A1']
# 获取填充颜色的RGB值(返回不带#的大写字符串,顺序为RGB)
bg_rgb = cell.fill.fgColor.rgb
print(f"目标颜色RGB代码: {bg_rgb}")

运行后得到的字符串就是你需要匹配的准确颜色值,例如蓝色可能是FF0000FF。


方法一:用openpyxl直接筛选并收集单元格信息

这种方法不依赖StyleFrame,直接操作Excel底层,兼容性更强:

from openpyxl import load_workbook
import pandas as pd

def get_colored_cells(file_path, sheet_name, target_rgb):
    wb = load_workbook(file_path, data_only=True)
    ws = wb[sheet_name]
    
    # 存储结果:值、行号、列名
    result = []
    for row in ws.iter_rows():
        for cell in row:
            # 检查单元格填充颜色是否匹配目标值
            if cell.fill.fgColor.rgb == target_rgb:
                col_name = cell.column_letter
                row_num = cell.row
                cell_value = cell.value
                result.append({
                    '值': cell_value,
                    '行号': row_num,
                    '列名': col_name
                })
    # 转换为DataFrame方便查看和处理
    return pd.DataFrame(result)

# 替换为你获取的目标RGB代码
target_color = 'FF0000FF'
colored_df = get_colored_cells('TimeTable, FSC, Fall-2022.xlsx', 'Monday', target_color)
print(colored_df)

方法二:修正StyleFrame的使用方式

如果坚持使用StyleFrame,需要开启原生样式读取,并匹配正确的RGB值:

import numpy as np
import pandas as pd
from StyleFrame import StyleFrame, utils

def find_bs_cs_2021(cell):
    # 加入你获取的蓝色RGB代码
    target_colors = {utils.colors.dark_yellow, 'FFB740', 'FF0000FF'}
    # use_openpyxl_styles=True时,bg_color返回原生RGB字符串
    return cell if cell.style.bg_color in target_colors else np.nan

def main():
    # 开启use_openpyxl_styles以读取原生Excel颜色代码
    sf = StyleFrame.read_excel(
        'TimeTable, FSC, Fall-2022.xlsx', 
        sheet_name='Monday', 
        read_style=True, 
        use_openpyxl_styles=True
    )
    # 筛选并清理空行空列
    filtered_sf = sf.applymap(find_bs_cs_2021).dropna(how='all').dropna(how='all', axis=1)
    # 转换为普通DataFrame查看
    filtered_df = filtered_sf.to_dataframe()
    print(filtered_df)

    # 提取值、索引和列名信息
    for idx, row in filtered_df.iterrows():
        for col in filtered_df.columns:
            if pd.notna(row[col]):
                print(f"值: {row[col]}, 行索引: {idx}, 列名: {col}")

if __name__ == "__main__":
    main()

注意事项

  • 确保Excel文件未被其他程序占用,否则会读取失败。
  • 如果单元格颜色是条件格式生成的,上述方法无法直接读取,需要额外解析条件格式规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:56:39