如何检测pandas DataFrame对应Excel单元格是否有填充色?
检查Excel单元格填充色并对应DataFrame的方法
核心思路
用openpyxl直接读取Excel的单元格样式信息,将其与DataFrame的行列索引对应(注意Excel是1-based索引,DataFrame是0-based),就能快速判断每个DataFrame单元格对应的原始Excel单元格是否有填充色。
实现步骤与代码示例
1. 读取Excel并记录带填充色的单元格位置
from openpyxl import load_workbook # 加载目标Excel文件 wb = load_workbook('your_file.xlsx', data_only=True) ws = wb.active # 若需指定工作表,替换为wb['Sheet名称'] # 存储有填充色的单元格位置(Excel的1-based行号、列号) colored_cells = set() for row in ws.iter_rows(): for cell in row: # 存在填充色的单元格,其patternType属性不为None if cell.fill.patternType is not None: colored_cells.add((cell.row, cell.column))
2. 结合已有DataFrame检查对应单元格
假设你已通过pandas读取了DataFrame:
import pandas as pd df = pd.read_excel('your_file.xlsx') # 遍历DataFrame每个单元格,匹配Excel的填充色状态 for df_row_idx, row in df.iterrows(): for df_col_idx, cell_value in enumerate(row): # 转换为Excel的1-based索引 excel_row = df_row_idx + 1 excel_col = df_col_idx + 1 if (excel_row, excel_col) in colored_cells: print(f"DataFrame位置({df_row_idx}, {df_col_idx})对应Excel单元格有填充色") else: print(f"DataFrame位置({df_row_idx}, {df_col_idx})对应Excel单元格无填充色")
3. 批量生成填充色标记矩阵
如果需要快速生成与DataFrame同形状的布尔标记矩阵:
# 生成布尔矩阵,True表示对应Excel单元格有填充色 color_mask = pd.DataFrame( [[(i+1, j+1) in colored_cells for j in range(df.shape[1])] for i in range(df.shape[0])], index=df.index, columns=df.columns ) # 查看标记结果 print(color_mask)
注意事项
load_workbook的data_only=True参数用于读取单元格计算结果,若需保留公式可移除,不影响样式读取。- Excel默认无填充的单元格
patternType为None,手动设置填充后该属性会变为solid或其他类型,此判断逻辑覆盖绝大多数场景。 - 多工作表场景下,需指定
ws = wb['目标工作表名']来切换对应工作表。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

