컴퓨터/Python

python win32 엑셀 특정 범위 지우기

풍경소리^^ 2024. 12. 3. 16:27

 

import os
import win32com.client

def column_number_to_letter(column_number):
    """
    열 번호를 열 문자로 변환합니다.
    :param column_number: 열 번호 (1부터 시작)
    :return: 열 문자 (예: 1 -> "A", 27 -> "AA")
    """
    letter = ""
    while column_number > 0:
        column_number, remainder = divmod(column_number - 1, 26)
        letter = chr(65 + remainder) + letter
    return letter

def delete_continuous_range(file_path, sheet_name, start_cell):
    """
    특정 Excel 파일의 Sheet에서 시작 셀부터 연속적인 데이터 범위를 지웁니다.
    
    :param file_path: Excel 파일 경로
    :param sheet_name: 워크시트 이름
    :param start_cell: 시작 셀 주소 (예: "J5")
    """
    try:
        excel = win32com.client.Dispatch("Excel.Application")
        excel.Visible = False  # Excel 창 숨기기

        # Excel 파일 열기
        workbook = excel.Workbooks.Open(file_path)
        worksheet = workbook.Sheets(sheet_name)

        # 시작 셀 정보
        start_range = worksheet.Range(start_cell)
        start_row = start_range.Row
        start_col = start_range.Column

        # 데이터가 연속된 행 탐색
        last_row = start_row
        for row in range(start_row, worksheet.UsedRange.Rows.Count + 1):
            # 해당 행의 데이터가 없으면 종료
            if worksheet.Cells(row, start_col).Value is None:
                break
            last_row = row

        # 데이터가 있는 마지막 열 계산
        used_range = worksheet.UsedRange
        last_col_num = used_range.Columns.Count + used_range.Column - 1
        last_col = column_number_to_letter(last_col_num)

        # 연속된 데이터 범위 삭제
        delete_range = f"{start_cell}:{last_col}{last_row}"
        worksheet.Range(delete_range).ClearContents()

        print(f"'{delete_range}' 범위의 데이터를 성공적으로 삭제했습니다.")

        # 파일 저장 및 닫기
        workbook.Save()
        workbook.Close()
        excel.Quit()

    except Exception as e:
        print(f"오류 발생: {e}")

    finally:
        excel.Quit()

# 실행
sheet_name = "Sheet1"  # 워크시트 이름
start_cell = "J5"  # 시작 셀

# 다른 경로와 파일 이름 결합
file_name = "01vlookup.xls"
data_folder = "./data"
# 파일 전체 경로 생성
file_path = os.path.abspath(os.path.join(data_folder, file_name))
# file_path = "./data/01vlookup.xlsx"  # 업로드된 파일 경로

# 현재 경로와 파일 이름 결합
# current_directory = os.getcwd()
# file_path = os.path.join(current_directory, file_name)

delete_continuous_range(file_path, sheet_name, start_cell)