影刀RPA Excel条件格式与数据条自动设置:让报表一眼看出问题
📅 2026/7/9 0:58:15
👁️ 阅读次数
📝 编程学习
影刀RPA Excel条件格式与数据条自动设置:让报表一眼看出问题
作者:林焱
采集完数据写入Excel只是第一步。如果一份销售报表,1000行数字密密麻麻,很难一眼看出哪个产品卖得好、哪个在掉队。条件格式(Conditional Formatting)就是解决这个问题的——自动给数据上色、加图标、画进度条。
openpyxl设置条件格式
影刀内置的Excel指令不支持条件格式,需要用openpyxl:
fromopenpyxlimportWorkbookfromopenpyxl.stylesimportPatternFill,Fontfromopenpyxl.formatting.ruleimportCellIsRule,DataBarRule,ColorScaleRule wb=Workbook()ws=wb.active# 先写数据data=[["产品","销量","环比"],["商品A",120,15],["商品B",85,-8],["商品C",200,25]]forrowindata:ws.append(row)# 1. 高亮规则:销量>150标绿色,<100标红色ws.conditional_formatting.add('B2:B10',CellIsRule(operator='greaterThan',formula=['150'],fill=PatternFill(start_color='C6EFCE',end_color='C6EFCE',fill_type='solid')))ws.conditional_formatting.add('B2:B10',[video(video-qSGFXpzG-1783501825534)(type-csdn)(url-https://live.csdn.net/v/embed/526818)(image-https://v-blog.csdnimg.cn/asset/582d14c3bd0451c5399cd990b56e2a0d/cover/Cover0.jpg)(title-拼多多店群自动化报活动上架!)]CellIsRule(operator='lessThan',formula=['100'],fill=PatternFill(start_color='FFC7CE',end_color='FFC7CE',fill_type='solid')))# 2. 数据条:销量列加进度条ws.conditional_formatting.add('B2:B10',DataBarRule(start_type='min',end_type='max',color='4472C4',showValue=True))# 3. 色阶:环比列,红白绿渐变ws.conditional_formatting.add('C2:C10',ColorScaleRule(start_type='min',start_color='FF4444',mid_type='percentile',mid_value=50,mid_color='FFFFFF',end_type='max',end_color='44FF44'))wb.save("带条件格式的报表.xlsx")图标集
fromopenpyxl.formatting.ruleimportIconSetRule# 三色箭头图标ws.conditional_formatting.add('C2:C10',IconSetRule(icon_style='3Arrows',type='num',values=[0,0])# <0红箭头, =0黄箭头, >0绿箭头)可用的图标样式:3Arrows,3TrafficLights,3Stars,4Rating,5Quarters等。
公式条件格式(更灵活)
fromopenpyxl.formatting.ruleimportFormulaRule# 高亮"环比下降"的行ws.conditional_formatting.add('A2:C10',FormulaRule(formula=['$C2<0'],fill=PatternFill(start_color='FFE0E0',end_color='FFE0E0',fill_type='solid')))# 高亮包含"手机"的产品名ws.conditional_formatting.add('A2:A10',FormulaRule(formula=['ISNUMBER(SEARCH("手机",$A2))'],font=Font(bold=True,color='FF0000')))自动化完整方案
在影刀中封装成一个优化函数:
defauto_format_excel(filepath,sheet_name=None):"""给Excel自动添加条件格式"""wb=openpyxl.load_workbook(filepath)ws=wb[sheet_name]ifsheet_nameelsewb.active# 自动检测数据区域max_row=ws.max_row max_col=ws.max_column# 对数值列自动加数据条forcolinrange(1,max_col+1):cell_value=ws.cell(row=2,column=col).value# 看第二行确认列类型ifisinstance(cell_value,(int,float)):col_letter=ws.cell(row=1,column=col).column_letter data_range=f"{col_letter}2:{col_letter}{max_row}"ws.conditional_formatting.add(data_range,DataBarRule(start_type='min',end_type='max',color='4472C4'))# 自动调整列宽forcolinrange(1,max_col+1):col_letter=ws.cell(row=1,column=col).column_letter max_width=max(len(str(ws.cell(row=r,column=col).valueor''))forrinrange(1,max_row+1))ws.column_dimensions[col_letter].width=min(max_width*1.2+2,40)wb.save(filepath)print("条件格式已添加")踩坑实录
坑1:条件格式覆盖范围错误
范围设错了,可能导致条件格式偏移。'B2:B10'只对B2到B10生效。如果后面数据增加了,新行不会自动带条件格式。建议把范围设得比实际数据大(如'B2:B1000')。
坑2:条件格式太多导致Excel卡顿
TEMU店群矩阵自动化运营核价报活动
一个Sheet里几百条条件格式规则会让Excel打开很慢。原则:同一类规则合并成一个范围,不要为每一行单独设规则。
坑3:openpyxl创建的工作簿没有默认样式
openpyxl.Workbook()创建的新文件没有Excel默认的字体和字号。建议用load_workbook打开一个设计好的模板文件,在此基础上添加数据和条件格式。
坑4:中文环境下Excel的颜色显示差异
某些颜色值在Excel中显示和你预期不一致(Excel有自己的调色板限制)。openpyxl的ColorScaleRule使用的颜色最好用标准颜色名(如'FF4444'而不是'#FF4444')。
写在最后
数据本身是枯燥的,但用条件格式可视化之后就能一眼发现问题。影刀负责采集和写入数据,openpyxl负责美化——让报表不仅有数据,还有洞察。
编程学习
技术分享
实战经验