반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

Win32com 모듈을 사용하려면 pywin32라는 패키지를 설치하셔야 합니다.

 

설치 방법은 지난 글을 참고해주세요.

 

2021.12.12 - [파이썬 패키지/엑셀] - [파이썬 엑셀/PyWin32 ] 개별 엑셀 파일의 특정 시트들을 새로운 엑셀 파일에 모두 합치기 (ft. Openpyxl로는 못함)


오늘은 하나의 엑셀 파일에 있는 엑셀 시트를 각각 분리해서 엑셀 파일로 저장해보는 프로젝트를 해보겠습니다.

 

대략적인 컨셉은 다음과 같습니다. 

 


 

1. 전체 코드

 

코드에 대한 설명은 주석으로 대체하도록 하겠습니다. 최대한 자세히 달아두었으나 이해가지 않으시는 부분은 댓글로 질문해주세요!

 

# step1.관련 모듈 및 패키지 import
import win32com.client

# step2.win32com(pywin32)를 이용해서 엑셀 어플리케이션 열기
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True #실제 작동하는 것을 보고 싶을 때 사용

# step3. 분리할 엑셀 파일이 있는 폴더 경로
path = r"C:\Users\SANGWOO\Desktop\VSCODE\엑셀 시트 분리"+"/"

# step4.분리하고자 하는 엑셀 통합문서 가져오기
wb = excel.Workbooks.Open(path + "통합 문서.xlsx")

# step5.통합문서의 엑셀 시트들의 이름을 리스트로 받기
Sheet_list = [sheet.Name for sheet in wb.Sheets]

# step6. 엑셀 시트 분리 및 저장 반복문
for sheet in Sheet_list:
    
    # 시트를 분리 저장할 새로운 엑셀 파일 open
    wb_new = excel.Workbooks.Add()

    # 통합문서의 시트 하나를 새로운 엑셀 문서에 copy
    wb.Worksheets(sheet).Copy(Before=wb_new.Worksheets("Sheet1"))
    
    # 처음 새로운 엑셀파일이 생성될 때 존재하는 "Sheet1" 시트 삭제
    wb_new.Worksheets("Sheet1").Delete()
    
    # 기존 경로에 시트명을 파일명으로 엑셀 파일 저장
    wb_new.SaveAs(path + sheet + ".xlsx")

# step7. 켜져있는 엑셀 및 어플리케이션 모두 종료
excel.Quit()

 

 

2. 새롭게 알게 된 점

 

1) win32com 모듈로 엑셀 시트 이름 얻는 법 & 리스트로 저장

 

# step5.통합문서의 엑셀 시트들의 이름을 리스트로 받기
Sheet_list = [sheet.Name for sheet in wb.Sheets]

 

<참고 링크>

 

2) win32com 모듈로 엑셀 시트 삭제하는 법

 

    # 삭제할 시트가 있는 wb.Worksheets("삭제할 시트명").Delete()
    
    wb.Worksheets("Sheet1").Delete()

 

 


오늘 준비한 내용은 여기까지입니다.

 

이 글이 도움이 되셨다면, 좋아요나 댓글을 남겨주세요. 블로그를 운영하는데에 큰 힘이 됩니다.

 

감사합니다.

반응형

+ Recent posts