2016-08-02 1 views
0

openpyxl에서 조건부 서식을 사용하고 있지만 공백 셀을 제외하려고 어려워졌습니다. CellisRule을 사용하여 포맷하는 숫자가있는 열이 있습니다. 내가 사용하는 코드는 다음과 같습니다.openpyxl에서 조건부 서식에서 빈 셀을 제외하는 방법은 무엇입니까?

ws2.conditional_formatting.add('C3:C25',CellIsRule(operator='lessThan', formula=['85'], stopIfTrue=True, fill=redFill,font=whiteText)) 

ws2.conditional_formatting.add('C3:C25',CellIsRule(operator='greaterThan', formula=['89.99'], stopIfTrue=True, fill=greenFill)) 

ws2.conditional_formatting.add('C3:C25',CellIsRule(operator='between', formula=['85', '89.99'], stopIfTrue=True, fill=yellowFill)) 

나는 FormulaRule을 사용하려고 시도했지만 수식에 사용할 생각이 없습니다.

업데이트 :

대신 루프에 대한이 일을 사용하여 조건부 서식을 사용.

for row in ws2.iter_rows("C3:C25"): 
    for cell in row: 
     if cell.value == None: 
      set_stylewhite(cell) 
     elif cell.value >= 90: 
      set_stylegreen(cell) 
     elif cell.value <= 85: 
      set_stylered(cell) 
     else: 
      set_styleyellow(cell) 
+0

Excel에 IFBlank 규칙이 있다고 생각합니다. 가장 좋은 방법은 Excel에서 관련 서식을 사용하여 시트를 만들고 XML –

답변

0

수식을 사용하는 경우 expression 유형 규칙을 사용해야합니다. 일반적으로 규칙과 스타일을 별도로 작성하는 것이 좋습니다.

from openpyxl import Workbook 
from openpyxl.formatting.rule import Rule 
from openpyxl.styles.differential import DifferentialStyle 
from openpyxl.styles import Font, PatternFill 

red_text = Font(color="9C0006") 
red_fill = PatternFill(bgColor="FFC7CE") 
dxf = DifferentialStyle(font=red_text, fill=red_fill) 

r = Rule(type="expression", dxf=dxf) 
r.formula = ["NOT(ISBLANK(A1))"] 

wb = Workbook() 
ws = wb.active 

for v in range(10): 
    ws.append([v]) 

ws['A4'] = None 
ws.conditional_formatting.add("A1:A10".format(ws.max_row), r) 
wb.save("sample.xlsx") 
+0

Cool을 리버스 엔지니어링하는 것입니다. 실제로 자체 규칙을 만들려고했지만 공식을 만드는 방법에 혼란을 겪고 있습니다 (예 : r.formula = [ "NOT (ISBLANK (A1))"]). 그 공식이 어떻게 만들어 졌는지 찾을 수있는 문서가 있습니까? –

+0

리버스 엔지니어링을 통해이 작업을 수행했는지 여부는 알 수 없습니다 (사양에 나와 있지 않습니다). 좌표는 조건부 형식의 범위에서 첫 번째 셀에 상대적입니다. –

+0

리버스 엔지니어링 방법에 대한 단계가 있습니까? Excel 워크 시트의 XML을 볼 수있는 방법을 찾으려고했지만 어떤 것도 찾을 수 없습니다. –

관련 문제