【Python】CellIsRule 오브젝트, FormulaRule 오브젝트를 사용해 특정의 셀이나 행의 표시 형식을 바꾼다.

파이썬을 사용하여 Excel 파일 작업을 공부하고 있습니다.
오늘의 주의(복습)는, 조건부 서식에 관해서입니다.
파이썬에서 Excel을 조작하기 위해 openpyxl이라는 패키지를 사용하고 있습니다.



상기와 같은 책 「상품 리스트를」



이런 표로 변경하고 싶습니다.
여기서 포인트는
  • 원가율이 55% 이하인 경우 문자를 파란색으로 변경
  • 제조업체는 공급자 B의 행을 회색으로 만듭니다

  • CellIsRule 객체


    CellIsRule(operator='条件', formula=[],
               font=Fontオブジェクト,
               border=Borderオブジェクト,
               fill=PatternFillオブジェクト)
    

    조건을 충족하는 셀의 서식을 변경하려면 먼저 조건부 서식을 만듭니다.
    생성하려면 위의 CellIsRule 객체를 사용합니다.

    operator 인수에 조건을 설정하고,
    조건은 formula 인수에 설명된 값에 적용됩니다.

    operator 인수의 조건은 다음과 같습니다.
  • greaterThan : 더 큰
  • greaterThanOrEqual : 이상
  • lessThan : 더 작은
  • lessThanOrEqual : 이하
  • equal: 같음
  • notEqual : 같지 않다
  • between: 값 사이
  • notBetween : 값 사이 이외

  • font, border, fill의 각 인수에는 조건을 만족했을 때에 설정하는 서식을
    Font 객체 등으로 설정합니다.

    CellIsRule 개체를 만든 후 어떤 셀에 설정할지
    Worksheet의 conditional_formatting.add 메서드에서 설정합니다.
    ws.conditional_formatting.add('条件付き書式を設定するセルの範囲',
                                  CellIsRule)
    

    FormulaRule 객체


    FormulaRule(formula=[数式],
                font=Fontオブジェクト,
                border=Borderオブジェクト,
                fill=PatternFillオブジェクト)
    

    CellIsRule 객체와 비슷하지만
    보다 상세한 조건 지정이나, 행 전체의 서식 변경시에 사용합니다.
    수식을 사용하는 것이 다른 점입니까?

    어떤 셀로 설정할지는 CellIsRule 객체의 시간과 유사합니다.
    Worksheet의 conditional_formatting.add 메서드에서 설정합니다.

    최종 코드


    from openpyxl import load_workbook
    from openpyxl.styles import Font, PatternFill
    from openpyxl.formatting.rule import CellIsRule, FormulaRule
    
    wb = load_workbook('商品リスト.xlsx')
    ws = wb.active
    
    # フォントの設定
    blue_font = Font(color='0000ff', bold=True)
    
    # セルの色を設定
    gray_fill = PatternFill(bgColor='C0C0C0', fill_type='solid')
    
    # フォントを変更する範囲と条件式
    cell_rule = CellIsRule(operator='lessThanOrEqual',
                           formula=[0.55], font=blue_font)
    
    # セルの色を変更する範囲と条件式
    formula_rule = FormulaRule(formula=['$H3="業者B"'], fill=gray_fill)
    
    ws.conditional_formatting.add('G3:G24', cell_rule)
    ws.conditional_formatting.add('B3:H24', formula_rule)
    
    wb.save('商品リスト_条件追加.xlsx')
    

    여담①



    이번에 PatternFill 객체의 fill_type 인수를 "solid"로 했기 때문에
    fgColor='C0C0C0'라고 기술하고 있던 것입니다.
    그러면 왜인지, 셀의 색이 백색이 되어 버렸습니다.

    bgColor='C0C0C0'로 변경하면 지정대로 회색이 되었습니다.

    만약을 위해서, 다른 패턴도 시험해 보았습니다만
    그쪽은 제대로 지정대로 색칠해줍니다.

    앞으로는
    PatternFill(fgColor='C0C0C0', bgColor='C0C0C0', fill_type='solid')
    

    와 같이, 둘 다 같은 색을 지정해 주면 실수가 없는 것 같습니다.

    여담②



    조건부 서식은 셀이 아니라 시트를 대상으로 설정합니다.
    Excel의 「홈」→「조건부 서식」→「룰의 관리」로 확인할 수 있습니다.

    의외로 이 설정, 수수하게 귀찮게 하는군요・・・.
    매번이라면 더욱. 프로그램은 위대하네요.

    좋은 웹페이지 즐겨찾기