2017-11-08 6 views
0

이 코드가 있는데 제대로 작동합니다. 하지만 문제는 내가 엘프 (Elif)를 많이 만들어야한다는 것입니다. 나는 그것을 더 우아하게 만들어야한다.Excel의 특정 셀에 색상을 채우려면 어떻게해야합니까?

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

def ws_f 방법을 시도했을 때 어떤 오류가 있었습니까? 어떻게 함수를 호출 했습니까? – QHarr

답변

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") 

그것은 변수가 외부 그림자하지 않은하는 것이 더 낫다는 그래서 그것을 wks 이름 위에 당신이 ws을 범위. 이 형식은 단순히 셀 자체에서 작동하는 동안 출력에서 ​​값이 반환 될 것으로 기대하므로 함수에서 return을 호출하지 않으려합니다. 나는 그것을 시험했고 그것은 나를 위해 일했다. 희망이 도움이!