如何用Python在Excel条件格式设置后按无填充筛选数据?
解决方案
一、Python实现方案(基于openpyxl)
假设你之前用openpyxl实现条件格式高亮,以下是基于填充格式筛选A列无填充内容的方法:
1. 读取并筛选无填充单元格
先加载文件,遍历A列判断单元格填充状态:
from openpyxl import load_workbook # 加载工作簿 wb = load_workbook("your_file.xlsx") ws = wb["Sheet1"] # 替换为你的工作表名 # 收集A列无填充的行数据(跳过表头,假设表头在第1行) no_fill_entries = [] for row in ws.iter_rows(min_col=1, max_col=1, min_row=2): cell = row[0] # 判断是否无填充(openpyxl中无填充的fill.type为None) if cell.fill.type is None: no_fill_entries.append({"row": cell.row, "value": cell.value}) # 输出结果或进一步处理 for entry in no_fill_entries: print(f"行{entry['row']}: {entry['value']}")
2. 直接在Excel中设置筛选规则
如果需要让保存后的Excel文件直接显示筛选结果,可以配置自动筛选:
# 开启自动筛选 ws.auto_filter.ref = ws.dimensions # 配置A列的无填充筛选 from openpyxl.worksheet.filters import ColorFilter, FilterColumn color_filter = ColorFilter(fill=True) color_filter.criteria = [{"color": None}] # 匹配无填充格式 # 将筛选规则应用到A列(列索引从0开始) filter_col = FilterColumn(colId=0, filters=color_filter) ws.auto_filter.filterColumn.append(filter_col) # 保存修改后的文件 wb.save("filtered_file.xlsx")
补充:基于重复项逻辑筛选(更可靠)
如果无填充单元格对应非重复项,可以直接通过值判断,避免格式读取误差:
# 提取A列所有值(跳过表头) a_values = [cell.value for cell in ws["A"][1:]] seen = set() unique_rows = [] for row_num, val in enumerate(a_values, start=2): if val not in seen: unique_rows.append((row_num, val)) seen.add(val) # 后续可根据行号筛选或标记
二、Excel原生操作(快速替代)
不需要代码的话,直接用Excel自带功能:
- 选中A列,点击「数据」选项卡→「筛选」,开启自动筛选
- 点击A列表头的筛选箭头,选择「颜色筛选」→「无填充」
- 瞬间就能得到筛选结果,适合快速操作
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

