Python 操作 Excel 条件格式指南

简介: 周一报表轰炸?Excel条件格式手动设置太耗时!本文详解Python自动化方案:openpyxl(读写全能)、xlsxwriter(生成高效)、Spire.XLS(商业级复杂规则),教你用代码一键高亮关键数据,告别无效加班,3秒定位问题。

​
周一早上九点,你的邮箱被各种报表塞满。

打开财务发来的季度销售数据,几千行数字挤在屏幕上,眼睛扫过去一片黑压压。老板在旁边等着汇报,问你这个季度哪个产品卖得最好、哪些区域掉得厉害。你拿着鼠标划来划去,半天找不出个所以然。

这场景,但凡用Excel干过活的人都懂——数据有了,但看不见。
代理 IP 使用小技巧 让你的数据抓取效率翻倍 (26).png

条件格式就是干这个用的。它能让数字“开口说话”:高于平均值的自动标绿,低于警戒线的自动飘红,重复值、排名、异常点一眼扫过去清清楚楚。但问题来了,每月、每周甚至每天都要手动重复这些操作,时间全耗在“格式化”上了。

Python能帮你解决这个麻烦。

用代码操作Excel条件格式,本质上就是把你手动点鼠标的步骤写成脚本。数据更新了,脚本跑一遍,格式自动生成。市面上主流的几个库——openpyxl、xlsxwriter、Spire.XLS——各有各的脾气,选对了工具,事半功倍。

一、openpyxl:最接地气的全能选手
openpyxl是处理Excel最常用的库,读写都支持,对条件格式的支持也比较完善。它的设计思路很符合直觉:先定规则,再上格式。

比如你想把成绩表里不及格(小于60分)的单元格标红,代码可以这么写:

from openpyxl import load_workbook
from openpyxl.styles import PatternFill
from openpyxl.formatting.rule import CellIsRule

wb = load_workbook('成绩表.xlsx')
ws = wb.active

定义红色填充

red_fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')

添加条件格式规则:单元格值小于60

ws.conditional_formatting.add('B2:B100',
CellIsRule(operator='lessThan',
formula=['60'],
fill=red_fill))

wb.save('成绩表_格式化.xlsx')

这段代码干的事,和你手动点“条件格式>突出显示单元格规则>小于”一模一样,区别在于——下次再来100份报表,它也能一秒干完。

openpyxl支持的规则类型不少:CellIsRule(基于值)、FormulaRule(基于公式)、ColorScaleRule(色阶)、IconSetRule(图标集)、DataBarRule(数据条)都有。想做复杂点的逻辑,比如“既要大于平均线,又要属于前10%”,用公式规则就能搞定。

有个坑得提醒你:openpyxl在读取带条件格式的现有文件时,规则信息可能会丢失。所以用它创建格式没问题,但别指望完美读取别人设好的规则。

二、xlsxwriter:写报表的一把好手
如果你只需要“生成”报表,不需要修改已有文件,xlsxwriter是更轻量级的选择。它专注于写入,功能纯粹,性能也不错。

xlsxwriter的语法有点不一样,用的是字典传参:

import xlsxwriter

workbook = xlsxwriter.Workbook('销售报表.xlsx')
worksheet = workbook.add_worksheet()

准备数据

data = [320, 450, 280, 490, 350, 420, 380]
worksheet.write_column('A1', data)

定义两种格式

green_format = workbook.add_format({'bg_color': 'green'})
red_format = workbook.add_format({'bg_color': 'red'})

设置条件格式:大于400标绿,小于等于400标红

worksheet.conditional_format('A1:A7', {'type': 'cell',
'criteria': '>',
'value': 400,
'format': green_format})
worksheet.conditional_format('A1:A7', {'type': 'cell',
'criteria': '<=',
'value': 400,
'format': red_format})

workbook.close()

xlsxwriter最实用的功能之一是配合pandas用。你拿pandas做完数据处理,直接用pd.ExcelWriter指定xlsxwriter引擎,然后调用条件格式方法,数据分析+报表生成一条龙。

import pandas as pd

df = pd.DataFrame({'销售额': [320, 450, 280, 490, 350]})

writer = pd.ExcelWriter('报表.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='销售数据', index=False)

workbook = writer.book
worksheet = writer.sheets['销售数据']

对B列(销售额)应用三色阶

worksheet.conditional_format('B2:B6', {'type': '3_color_scale'})

writer.close()

xlsxwriter不支持读取已有文件,也不能修改。但如果你是从零开始建报表,它够快、够稳、够干净。

三、Spire.XLS:商业级功能的代表
Spire.XLS是个商业库,功能覆盖面比前两个更广。它的API设计更接近Excel本身的逻辑,支持的操作也更多——比如设置公式条件、处理跨工作表引用、精细化控制格式选项。

有些场景下,用前两个库实现起来比较费劲,比如“隔行变色”这种需求。用Spire.XLS可以写得很直白:

from spire.xls import
from spire.xls.common import

workbook = Workbook()
workbook.LoadFromFile("数据.xlsx")
sheet = workbook.Worksheets[0]

添加条件格式

conditionalFormat = sheet.ConditionalFormats.Add()
conditionalFormat.AddRange(sheet.Range[2, 1, sheet.LastRow, sheet.LastColumn])

偶数行设白色背景

condition1 = conditionalFormat.AddCondition()
condition1.FirstFormula = "=MOD(ROW(),2)=0"
condition1.FormatType = ConditionalFormatType.Formula
condition1.BackColor = Color.get_White()

奇数行设浅灰背景

condition2 = conditionalFormat.AddCondition()
condition2.FirstFormula = "=MOD(ROW(),2)=1"
condition2.FormatType = ConditionalFormatType.Formula
condition2.BackColor = Color.get_LightGray()

workbook.SaveToFile("隔行变色.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

Spire.XLS还支持一些“开箱即用”的高级功能:Top/Bottom规则、高于/低于平均值、介于两个数之间。这些在Excel里是内置选项,用openpyxl得绕个弯,用Spire.XLS直接调方法就行。

不过它是收费库,有30天试用期。项目预算够、追求开发效率的情况下可以考虑。

四、怎么选?看你的场景
三个库没有绝对的好坏,关键看你想干什么。

openpyxl最适合“既要读又要写”的场景。你需要修改现有文件、保留原有内容、同时添加新格式,用它最稳妥。社区活跃,遇到问题好搜答案。

xlsxwriter适合“纯生成”的场景。跑数据分析脚本,自动输出带格式的报表,发给老板或客户。性能好,文件体积控制得也不错。配合pandas用,体验很顺。

Spire.XLS适合复杂格式需求的场景。要做多条件嵌套、大量使用公式规则、或者嫌自己造轮子太麻烦。商业环境、预算允许的情况下,能省不少开发时间。

五、几个实战技巧

回到开头那个周一早上的场景。

用Python写完条件格式脚本之后,你只需要把新季度数据拖进文件夹,双击运行。再打开Excel时,销售冠军已经标成绿色,下滑区域标成橙色,异常值标成红色。老板指着屏幕问“这个月怎么回事”,你三秒就能找到问题出在哪。

那多出来的半小时,不用再对着黑压压的数字发呆。

​

目录
相关文章
|
4月前
|
人工智能 自然语言处理 数据挖掘
什么是OPD一人部门?未来企业为什么会出现“超级员工”
OPD(一人部门)指个人借助AI智能体协同完成传统多岗位工作的新组织形态。AI降低执行成本,推动企业从“人力扩张”转向“AI协同”,催生具备全流程能力的“超级员工”。OPC中国正构建AI时代的新职业与组织能力体系。(239字)
423 4
|
8月前
|
弹性计算 运维 数据可视化
阿里云幻兽帕鲁(Palworld)一键部署全攻略:零基础3分钟搭建专属联机服务器
《幻兽帕鲁》的爆火让越来越多玩家想要搭建专属联机服务器,和好友一起体验驯兽、建造、冒险的乐趣。2026年阿里云针对这款游戏推出了专属优化的一键部署方案,彻底打破了传统服务器搭建的技术壁垒,哪怕是零基础的游戏玩家,也能在3分钟内完成低延迟联机服务器的搭建,还支持自定义玩家数、PVP模式、存档导入与自动备份等功能,覆盖1-32人全场景游玩需求。只需完成阿里云实名认证并拥有Steam游戏账号,就能轻松变身服主,打造专属于你的帕鲁世界。本文将手把手拆解从服务器配置到游戏联机的全过程,还附带进阶配置、运维技巧和常见问题排查,让你全程无踩坑畅玩。
1880 1
|
10月前
|
存储 消息中间件 Apache
ZooKeeper 实战指南:从入门到场景解析
Apache ZooKeeper是分布式系统的协调核心,本文带你快速搭建环境,掌握Znode操作与Watcher机制,深入理解其在分布式锁、配置管理、服务发现等场景的应用,并解析美团Leaf中的实践案例。
1530 220
|
8月前
|
数据采集 Java Go
爬虫项目该选 Python 还是 Golang?看这篇就够了
本文对比Python与Golang在爬虫开发中的七大维度:语法简洁性、第三方库丰富度(如Scrapy vs Colly)、并发性能(Goroutine vs GIL限制)、内存占用、代码可读性、数据处理能力(Pandas等优势)及部署便捷性(Go可直接编译为跨平台二进制),助你按需选型。
562 10
|
8月前
|
数据可视化 数据挖掘 API
Matplotlib 入门指南:让数据"开口说话"的魔法库
本教程系统讲解Matplotlib数据可视化:从环境搭建、核心概念(Figure/Axes/Artist)到实战分析电影评分趋势;涵盖中文字体配置、常见陷阱规避及最佳实践,并指引Seaborn、Plotly等进阶方向,助你高效掌握Python可视化核心技能。(239字)
|
9月前
|
弹性计算 人工智能 小程序
2026年阿里云服务器收费价格表(含轻量/ECS/GPU,包年/月付/按量)
2026年最新阿里云服务器收费价格表(含轻量/ECS/GPU,包年/月付/按量),数据来自官方公示与最新活动,可直接对照选型。
5900 10
|
BI Python
利用OpenPyXL实现Excel条件格式化
本文介绍如何使用Python的`openpyxl`库为Excel文件添加条件格式,包括颜色渐变、图标集、数据条及基于公式的规则等,提升数据可读性和美观度。通过具体示例,展示了从安装库、加载文件到应用各种条件格式的详细过程,最后保存修改后的文件。
1136 12
|
Python
使用OpenPyXL库实现Excel单元格其他对齐方式设置
本文介绍了如何使用Python的`openpyxl`库设置Excel单元格中的文本对齐方式,包括文本旋转、换行、自动调整大小和缩进等,通过具体示例代码展示了每种对齐方式的应用方法,适合需要频繁操作Excel文件的用户学习参考。
1045 85
使用OpenPyXL库实现Excel单元格其他对齐方式设置
|
数据挖掘 数据处理 数据库
Pandas数据聚合:groupby与agg
Pandas库中的`groupby`和`agg`方法是数据分析中不可或缺的工具,用于数据分组与聚合计算。本文从基础概念、常见问题及解决方案等方面详细介绍这两个方法的使用技巧,涵盖单列聚合、多列聚合及自定义聚合函数等内容,并通过代码案例进行说明,帮助读者高效处理数据。
2190 32
|
SQL XML Java
【MyBatis】 MyBatis与MyBatis-Plus的区别
【MyBatis】 MyBatis与MyBatis-Plus的区别
8649 0
【MyBatis】 MyBatis与MyBatis-Plus的区别