콘솔워크

openpyxl 엑셀에 특정열이 없는 경우 오른쪽으로 하나씩 추가하는 코드 본문

프로그래밍/python

openpyxl 엑셀에 특정열이 없는 경우 오른쪽으로 하나씩 추가하는 코드

콘솔워크 2024. 4. 13. 08:59
반응형
    def add_columns_if_missing(file_path, column_names):
        # 엑셀 파일 열기
        workbook = openpyxl.load_workbook(file_path)
        sheet = workbook.active

        # 헤더로 사용될 첫 번째 행에서 모든 컬럼 이름 가져오기
        headers = [cell.value for cell in sheet[1]]  # 1행의 모든 셀 값을 리스트로 저장

        # 현재 헤더에 몇 개의 컬럼이 있는지 확인
        current_max_column = len(headers)
        print("current_max_column", current_max_column)

        # 주어진 컬럼 이름들 중 누락된 것이 있는지 확인하고 추가
        for column_name in column_names:
            if column_name not in headers:
                # 새 컬럼 위치 결정
                current_max_column += 1
                # 새 컬럼 추가
                sheet.cell(row=1, column=current_max_column, value=column_name)

        # 변경된 내용을 동일 파일에 저장
        workbook.save(file_path)

 

사용예시

기존에 있던 파일에서 새로운 파일로 생성 후 오른쪽에 필요한 컬럼들을 새로 추가한다.

def copy_file(file_path):
    file_name = Path(file_path).stem
    now = datetime.now()
    str_now = now.strftime("%Y%m%d%H%M%S")
    config = ProgramConfig()
    destination_path = os.path.join(config.today_output_folder, f"{file_name}_{str_now}.xlsx")
    shutil.copy(file_path, destination_path)
    return destination_path
        new_columns = [
            "부동산식별번호",
            "기본정보",
            "소유주1",
            "소유주2",
            "소유주3",
            "공주가",
            "대지권",
            "디스코_대지면적",
            "디스코_건축면적",
            "디스코_건폐율",
            "디스코_연면적",
            "디스코_용적률산정연면적",
            "디스코_용적률",
            "디스코_외필지수",
            "디스코_국토계획",
            "디스코_기타법률",
            "디스코_용도지역",
            "디스코_토지면적",
        ]
        result_file = copy_file(input_excel)
        self.add_columns_if_missing(result_file, new_columns)

 

반응형