openpyxl excel 根据数值上底色

引言

项目需求,需要很清晰的显示出数值的差异
image.png

编码思路

数据源,确定数据源是首要目标,因为项目中的数据源是这种格式的

col1 col2 col3
20240101 0 12.34
20240101 1 12.45
20240101 2 12.56
20240101 3 12.67
20240101 4 12.78
20240102 0 13.78
20240102 1 13.78
... ... ...

为了保证是阶梯形状,需要手动搞一下,当然使用df.pivot(index='date', columns='col', values='value')

首先需要确认最小值和最大值,这里如果使用的是DataFrame,可以使用下面的方式获取

n_max = source[列].max()
n_min = source[列].min()

计算数值所对应的颜色

green = [68, 148, 88]
red = [226, 94, 72]


def get_color(value):
    scaled_value = 1- ( ((value - n_min) / (n_max - n_min)))
    r = hex(int(scaled_value * (red[0] - green[0]) + green[0]))[2:]
    g = hex(int(scaled_value * (red[1] - green[1]) + green[1]))[2:]
    b = hex(int(scaled_value * (red[2] - green[2]) + green[2]))[2:]
    if len(r) == 1:
        r = '0' + r
    if len(g) == 1:
        g = '0' + g
    if len(b) == 1:
        b = '0' + b
    print(r, g, b)
    return r + g + b

上色

sheet.cell(i, j).fill = openpyxl.styles.PatternFill(start_color=get_color(sheet.cell(i, j).value),
                                                                    end_color=get_color(sheet.cell(i, j).value),
                                                                    fill_type='solid')

结语

主要是用于范围内颜色渐变,scaled_value 里面的 1- 也可以尝试去掉,看看差异

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。