我有这个代码,它工作正常。但问题是我必须制作很多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
方式。有什么建议吗?
答案 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
,因为输出将期望传回一个值,而此格式只对单元本身进行操作。我测试了它,它对我有用。希望这有帮助!