엑셀의 표를 읽어와서, 조건부 서식 - 색조를 파이썬으로 구현하고 싶은데 어떻게 해야되나요?
조회수 1418회
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')
댓글 입력