엑셀의 표를 읽어와서, 조건부 서식 - 색조를 파이썬으로 구현하고 싶은데 어떻게 해야되나요?

조회수 1420회

엑셀에는 10 X 10의 표에 숫자가 기록되어 있고, 그 파일을 파이썬으로 불러와서 숫자의 크기의 따라 색을 넣어서 히트맵 같이 보고 싶은데 어떻게 구현할까요?

1 답변

  • from openpyxl import load_workbook
    from openpyxl.styles import PatternFill
    from openpyxl.utils import get_column_letter
    
    # 엑셀 파일 로드
    workbook = load_workbook(filename='파일명.xlsx')
    sheet = workbook.active
    
    # 히트맵을 적용할 범위 지정 (예: 10x10 표)
    start_row = 1
    end_row = 10
    start_column = 1
    end_column = 10
    
    # 최소 및 최대 값 찾기
    min_value = float('inf')  # 최대값으로 초기화
    max_value = float('-inf')  # 최소값으로 초기화
    
    for row in sheet.iter_rows(min_row=start_row, max_row=end_row, min_col=start_column, max_col=end_column):
        for cell in row:
            value = cell.value
            if isinstance(value, (int, float)):  # 숫자인 경우에만 처리
                min_value = min(min_value, value)
                max_value = max(max_value, value)
    
    # 조건부 서식 - 색조 적용
    gradient_start_color = "FFFF0000"  # 시작 색상 (빨강)
    gradient_end_color = "FF00FF00"  # 종료 색상 (녹색)
    
    for row in sheet.iter_rows(min_row=start_row, max_row=end_row, min_col=start_column, max_col=end_column):
        for cell in row:
            value = cell.value
            if isinstance(value, (int, float)):  # 숫자인 경우에만 처리
                # 숫자에 대한 정규화 수식 적용 (0.0 ~ 1.0 사이 값)
                normalized_value = (value - min_value) / (max_value - min_value)
    
                # 색상 계산
                red = int((1 - normalized_value) * int(gradient_start_color[2:4], 16) + normalized_value * int(gradient_end_color[2:4], 16))
                green = int((1 - normalized_value) * int(gradient_start_color[4:6], 16) + normalized_value * int(gradient_end_color[4:6], 16))
                blue = int((1 - normalized_value) * int(gradient_start_color[6:8], 16) + normalized_value * int(gradient_end_color[6:8], 16))
    
                # RGB 값을 엑셀의 색상 코드로 변환
                hex_color = f"FF{get_column_letter(red)}{get_column_letter(green)}{get_column_letter(blue)}"
    
                # 조건부 서식 - 색조 적용
                cell.fill = PatternFill(start_color=hex_color, end_color=hex_color, fill_type="solid")
    
    # 변경사항 저장
    workbook.save(filename='파일명_히트맵.xlsx')
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)