需求介绍
本人的 excel 数据是之前通过 pandas 导出的,现在有个需求就是对 excel 某一列的每个单元格的值进行判断,如果这个值在某一区间内,那么就给这个单元格填充响应的背景颜色。在使用 pandas 的过程中发现 pandas 好像并不能实现此功能,所以在假期期间学习了一下 openpyxl,使用它操作 excel 真是太爽了。
数据形式
代码
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
wb = load_workbook("airquality.xlsx")
# 默认选择第一张 sheet 表
ws = wb.active
# 选取数据区
cells = ws.iter_rows(min_row=2, min_col=6, max_col=6)
# 构建颜色对象,start_color 表示前景色,end_color 表示背景色。green_fill = PatternFill("solid", start_color='00E400')
yellow_fill = PatternFill("solid", start_color='FFFF00')
orange_fill = PatternFill('solid', start_color='FF7E00')
red_fill = PatternFill('solid', start_color='FF0000')
pink_fill = PatternFill('solid', start_color='99004C')
maroon_fill = PatternFill('solid', start_color='7E0023')
for i in cells:
# 每行的内容是元组,每个元组只有一个单元格,所以取第一项的 value,然后转为 int 型
value = int(i[0].value)
if value <= 50:
i[0].fill = green_fill
elif 50 < value <= 150:
i[0].fill = yellow_fill
elif 150 < value <= 200:
i[0].fill = orange_fill
elif 200 < value <= 250:
i[0].fill = pink_fill
else:
i[0].fill = maroon_fill
wb.save("new_sheet.xlsx")
wb.close()
最后处理过后的 excel 为这个样子。