乐趣区

openpyxl给excel填充颜色

需求介绍

本人的 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 为这个样子。

退出移动版