如何在Excel中填充特定颜色的单元格?

时间:2017-11-08 14:58:17

标签: python excel openpyxl

我有这个代码,它工作正常。但问题是我必须制作很多if-elif的东西。我需要以更优雅的方式制作它。

wb = openpyxl.load_workbook('/New.xlsx')
ws = wb.active
ws = wb.get_sheet_by_name(u'И')

redFill = PatternFill(start_color='FFFF00',end_color='FFFF00',fill_type='solid')#желтый
redFill2 = PatternFill(start_color='FF4500',end_color='FF4500',fill_type='solid')#красный
redFill3 = PatternFill(start_color='FFA500',end_color='FFA500',fill_type='solid')#оранжевый
redFill4 = PatternFill(start_color='228B22',end_color='228B22',fill_type='solid')#зеленый

if ws.cell(row=2, column=4).value=='50,00%':
    ws['E2'].fill = redFill2
elif ws.cell(row=2, column=4).value=='75,00%':
    ws['E2'].fill = redFill3
elif ws.cell(row=2, column=4).value=='100,00%':
    ws['E2'].fill = redFill4

wb.save('/New.xlsx')

我想创建这样的东西:

def ws_f(row,column):
    if ws.cell(row=row, column=column).value=='50,0%':
        return ws.cell.fill = redFill2
    elif ws.cell(row=row, column=column).value=='75,0%':
        return ws.cell.fill=redFill3
    elif ws.cell(row=row, column=column).value=='100,0%':
        return ws.cell.fill=redFill4

ws_f(3,5)

但它不适用于def ws_f方式。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

根据我使用openpyxl的经验,格式化函数就像你想要的那样,也需要将工作表作为参数传入。

wb = openpyxl.load_workbook('/New.xlsx')
ws = wb.active
ws = wb.get_sheet_by_name(u'И')

redFill = PatternFill(start_color='FFFF00',end_color='FFFF00',fill_type='solid')#желтый
redFill2 = PatternFill(start_color='FF4500',end_color='FF4500',fill_type='solid')#красный
redFill3 = PatternFill(start_color='FFA500',end_color='FFA500',fill_type='solid')#оранжевый
redFill4 = PatternFill(start_color='228B22',end_color='228B22',fill_type='solid')#зеленый


def ws_f(wks, row, column):
    if wks.cell(row=row, column=column).value=='50,0%':
        wks.cell(row=row,column=column).fill = redFill2
    elif wks.cell(row=row, column=column).value=='75,0%':
        wks.cell(row=row,column=column).fill = redFill3
    elif wks.cell(row=row, column=column).value=='100,0%':
        wks.cell(row=row,column=column).fill = redFill4
wsf(ws, 3, 4)
wb.save("File_out.xlsx")

让变量不影响你上面的外部范围ws也更好,所以我把它命名为wks。您不希望在函数中调用return,因为输出将期望传回一个值,而此格式只对单元本身进行操作。我测试了它,它对我有用。希望这有帮助!