Python openpyxl库突出显示电子表格中的多个单元格

Python openpyxl库突出显示电子表格中的多个单元格,python,excel,openpyxl,Python,Excel,Openpyxl,为了切中要害,我正在运行一些测试,并编写了一个生成数据分析电子表格的程序 对于每个测试,已经在随机位置将某些数字写入电子表格(我编写程序将这些数字作为字符串列表存储在一边),我希望用颜色突出显示/标记这些数字 我在openpyxl库中使用python编写了以下代码行: if trackPgmBits: ws = wb['Pgm tracking'] ws.append(['']) for j in range(len(pgm_tracking_summary)):

为了切中要害,我正在运行一些测试,并编写了一个生成数据分析电子表格的程序

对于每个测试,已经在随机位置将某些数字写入电子表格(我编写程序将这些数字作为字符串列表存储在一边),我希望用颜色突出显示/标记这些数字

我在openpyxl库中使用python编写了以下代码行:

if trackPgmBits:
    ws = wb['Pgm tracking']
    ws.append([''])
    for j in range(len(pgm_tracking_summary)):
        for i in range(len(pgm_tracking_summary[j])):
            if analog_tracking_summary[j][i] == '':
                pgm_tracking_summary[j][i] = ''
        ws.append(pgm_tracking_summary[j])



    RRule = CellIsRule(operator='equal', formula=highlightPgmBits, stopIfTrue = True, fill = PatternFill(start_color='FFFF00', end_color='FFFF00' ,fill_type='solid'))
    RRange = "A1:"+_get_column_letter(ws.max_column) + str(ws.max_row)
    ws.conditional_formatting.add(RRange, RRule)  
我要突出显示的数字数组存储在数组highlightPgmBits中,并通过以下公式传递到程序中:formula=highlightPgmBits'

**highlightPgmBits是字符串列表

当我替换为硬编码的单个值时,此代码起作用:formula=['2.4087']

当我替换为两个硬编码的值时,此代码不起作用:公式=['2.4087','2.7']

这让我相信我的方法只适合突出显示一个数字。但是,一定有办法解决这个问题!有什么想法吗

谢谢大家!

工作解决方案:

我基本上需要遍历我创建的列表中的每个元素,为我想要突出显示的每个数字制定一个新的“规则”:

尽管效率低下,但它确实起到了作用。我还根据我想监控的具体情况添加了不同颜色的涂料

if trackPgmBits:
    ws = wb['Pgm tracking']
    print 'highlightPgmBits'
    print highlightPgmBits
    ws.append([''])
    for j in range(len(pgm_tracking_summary)):
        for i in range(len(pgm_tracking_summary[j])):
            if analog_tracking_summary[j][i] == '':
                pgm_tracking_summary[j][i] = ''
        ws.append(pgm_tracking_summary[j])

    for j in range(len(highlightPgmBits)):
        if highlightPgmBits_Cycle < (cycles-1)/4:
            RRule = CellIsRule(operator='equal', formula=[highlightPgmBits[j]], stopIfTrue = True, fill = PatternFill(start_color='FFA600', end_color='FFA600' ,fill_type='solid'))
            RRange = "A1:"+_get_column_letter(ws.max_column) + str(ws.max_row)
            ws.conditional_formatting.add(RRange, RRule)
        elif (highlightPgmBits_Cycle[j] < (cycles-1)/2) and (highlightPgmBits_Cycle[j] >= (cycles-1)/4):
            RRule = CellIsRule(operator='equal', formula=[highlightPgmBits[j]], stopIfTrue = True, fill = PatternFill(start_color='FFFF00', end_color='FFFF00',fill_type='solid'))
            RRange = "A1:"+_get_column_letter(ws.max_column) + str(ws.max_row)
            ws.conditional_formatting.add(RRange, RRule)
        elif (highlightPgmBits_Cycle[j] < (cycles-1)*(3/4)) and (highlightPgmBits_Cycle[j] >= (cycles-1)/2):
            RRule = CellIsRule(operator='equal', formula=[highlightPgmBits[j]], stopIfTrue = True, fill = PatternFill(start_color='00F7FF', end_color='00F7FF' ,fill_type='solid'))
            RRange = "A1:"+_get_column_letter(ws.max_column) + str(ws.max_row)
            ws.conditional_formatting.add(RRange, RRule)
        else: 
            RRule = CellIsRule(operator='equal', formula=[highlightPgmBits[j]], stopIfTrue = True, fill = PatternFill(start_color='73FF00', end_color='73FF00' ,fill_type='solid'))
            RRange = "A1:"+_get_column_letter(ws.max_column) + str(ws.max_row)
            ws.conditional_formatting.add(RRange, RRule)
如果trackPgmBits:
ws=wb['Pgm跟踪']
打印“highlightPgmBits”
打印highlightPgmBits
ws.append([“”])
对于范围内的j(len(pgm_跟踪_摘要)):
对于范围内的i(len(pgm_跟踪_摘要[j]):
如果模拟跟踪摘要[j][i]='':
pgm_跟踪_摘要[j][i]=''
ws.append(pgm_跟踪_摘要[j])
对于范围内的j(len(highlightPgmBits)):
如果highlightPgmBits_周期<(周期-1)/4:
RRule=CellIsRule(运算符='equal',公式=[highlightPgmBits[j]],stopIfTrue=True,fill=PatternFill(开始颜色='FFA600',结束颜色='FFA600',填充类型='solid'))
RRange=“A1:”+\u获取列字母(ws.max\u列)+str(ws.max\u行)
ws.conditional_formatting.add(RRange,RRule)
elif(highlightPgmBits_-Cycle[j]<(cycles-1)/2)和(highlightPgmBits_-Cycle[j]>=(cycles-1)/4):
RRule=CellIsRule(运算符='equal',公式=[highlightPgmBits[j]],stopIfTrue=True,fill=PatternFill(开始颜色='FFFF00',结束颜色='FFFF00',填充类型='solid'))
RRange=“A1:”+\u获取列字母(ws.max\u列)+str(ws.max\u行)
ws.conditional_formatting.add(RRange,RRule)
elif(highlightPgmBits_-Cycle[j]<(cycles-1)*(3/4))和(highlightPgmBits_-Cycle[j]>=(cycles-1)/2):
RRule=CellIsRule(运算符='equal',公式=[highlightPgmBits[j]],stopIfTrue=True,fill=PatternFill(开始颜色='00F7FF',结束颜色='00F7FF',填充类型='solid'))
RRange=“A1:”+\u获取列字母(ws.max\u列)+str(ws.max\u行)
ws.conditional_formatting.add(RRange,RRule)
其他:
RRule=CellIsRule(运算符='equal',公式=[highlightPgmBits[j]],stopIfTrue=True,fill=PatternFill(开始颜色='73FF00',结束颜色='73FF00',填充类型='solid'))
RRange=“A1:”+\u获取列字母(ws.max\u列)+str(ws.max\u行)
ws.conditional_formatting.add(RRange,RRule)

请评论,如果你试图实现类似的东西,我的帖子似乎混乱,我可以澄清!另外,如果你知道一个更有效的解决方案,请分享