반응형

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

 

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

 

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

 

 


오늘은 제목과 같이 개별 엑셀 파일의 특정 시트들을 새로운 엑셀 파일에 모두 합치는 파이썬 프로그램을 만들어 보겠습니다.

 

대략적인 컨셉은 다음과 같습니다. 보시다시피 이번 시간에는 openpyxl 대신에 Windows OS에서 Office 프로그램을 제어해 줄 수 있는 Pywin32 패키지를 사용하였습니다.

 

 

자세한 개념에 대한 설명은 아래의 링크를 참고해주시고, 저는 코드 설명만 드리도록 하겠습니다.

 

https://wikidocs.net/153820

 

2) win32com 통해 엑셀 다루기 - 1편

win32com에 속한 client라는 모듈을 활용하여 엑셀을 제어할 수 있습니다. 이번 편에서는 win32com.client를 이용해서 엑셀을 제어하는 기본적인 방법에 ...

wikidocs.net

 


 

1. 전체 코드

 

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

 

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

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

# step3.엑셀 어플리케이션에 새로운 Workbook 추가
wb_new = excel.Workbooks.Add() 

# step4.glob 모듈로 원하는 폴더 내의 모든 xlsx 파일의 경로를 리스트로 반환
list_filepath = glob.glob(r'C:\Users\SANGWOO\Desktop\VSCODE\엑셀 샘플\*.xlsx', recursive=True)

# step5.엑셀 시트를 추출하고 새로운 엑셀에 붙여넣는 반복문
for filepath in list_filepath:

    # 받아온 엑셀 파일의 경로를 이용해 엑셀 파일 열기
    wb = excel.Workbooks.Open(filepath)
    
    # 새로 만든 엑셀 파일에 추가
    # 추출할wb.Worksheets("추출할 시트명").Copy(Before=붙여넣을 wb.Worksheets("기준 시트명")
    wb.Worksheets("코딩유치원").Copy(Before=wb_new.Worksheets("Sheet1"))

# step6. 취합한 엑셀 파일을 "통합 문서"라는 이름으로 저장
wb_new.SaveAs(r"C:\Users\SANGWOO\Desktop\VSCODE\엑셀 샘플\통합 문서.xlsx")

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

 

 

2. 새롭게 알게 된 점

 

1) openpyxl은 Workbook끼리 Sheet이동이 되지 않는다.

 

for filepath in list_filepath:
    
    wb = op.load_workbook(filepath)
    
    ws = wb["코딩유치원"]
    
    wb_new.copy_worksheet(ws)
    
    wb_new.save("통합 문서.xlsx")

 

위의 코드로 시트 이동을 시도해보았으나 아래와 같은 에러를 출력했습니다.

 

ValueError: Cannot copy between worksheets from different workbooks

 

 

2) Pywin32 패키지는 Windows OS 전용이다. (Mac OS에 MS 프로그램이 있어도 안됨)

 

아래의 사진은 Mac OS에서 pywin32를 설치하려 했을 때 출력되는 에러입니다.

제가 잘 못해서 그럴 가능성도 있지만, 애초에 pywin32가 윈도우 전용 패키지가 아닐까 생각됩니다.

 

 

3) Pywin32 패키지 설치방법

 

Windows에서 주피터 노트북을 이용해서 pywin32를 설치하니 커널이 먹통이 되는 문제가 발생했습니다.

 

해결책은 Anaconda 인터프리터를 사용할 때에는 pip가 아닌 conda로 install 해주어야 하는 것이었습니다.

 

conda install -c anaconda pywin32

 

<참고한 블로그>

https://gentlesark.tistory.com/112

 

 


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

 

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

 

감사합니다.

반응형

+ Recent posts