* Win32com.client로 엑셀 다루기 포스팅
1편 : 2021.11.23 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 사용하기 기초
2편 : 2021.12.14 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 시트 다루기
3편 : 2021.12.22 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 차트 다루기
4편 : 2021.12.30 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 셀서식 지정하기
5편 : 2022.01.02 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 사용해서 엑셀 영역 선택하는 방법 4가지
6편 : 2022.01.17 - [코딩/업무자동화] - [파이썬/업무자동화] win32com.client 엑셀 파일 저장 및 옵션
이 전에 openpyxl을 통해 Excel 시트를 다루는 법에 대해 설명한 적이 있다.
(참고링크 : 2021.11.09 - [코딩/업무자동화] - [파이썬/업무자동화] openpyxl 시트 조작 방법 4가지)
이번 포스팅은 win32com.client 모듈을 사용해서 엑셀의 시트를 제어하는 방법을 정리해보았다. 크게 다르지 않지만 win32com.client를 사용하면 Openpyxl에서 불가능한 파일간 시트이동/복사가 가능하다. 자세한 내용은 아래 2번에서 설명.
1. 시트 생성
Worksheet를 생성하는 과정은 간단하다. Workbook 객체를 생성해서 Workbook에 대해 새로운 시트를 추가하는 것이다.
<코드>
import win32com.client
#엑셀 app 객체 생성 및 실행과정 보이게 설정(Visible)
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
#기존에 있는 "data1.xlsx"파일을 Workbook 객체로 설정
wb1 = excel.Workbooks.Open(r"C:\Users\Desktop\VS CODE\Project\17. win32com\data1.xlsx")
#data1.xlsx 파일에 새로운 Worksheet 생성 및 ws1으로 객체 설정
ws1 = wb1.Worksheets.Add()
기존에 있던 Sheet가 "test"였고, Worsheets.Add( )를 수행하면 "Sheet1"이라는 새로운 시트가 생성되었다. ws1이라는 변수는 "Sheet1"에 대한 Worksheet 객체 성질을 가지게 된다.
한번더 똑같은 코드를 실행해보자
<코드>
#data1.xlsx 파일에 새로운 Worksheet 생성 및 ws2으로 객체 설정
ws2 = wb1.Worksheets.Add()
"Sheet2"가 새로 생성되고 ws2는 "Sheet2" 객체를 바인딩한 변수이다.
만약, 위 처럼 Sheet를 새로 생성하지 않고 기존에 활성화 된 시트를 설정하는 방법은 아래와 같다. 위 이미지 기준으로 "Sheet2" 가 설정되게 된다.
<코드>
#현재 활성화되어 있는 시트를 객체로 설정
ws3 = wb1.ActiveSheet
원래 있는 특정 시트를 시트명으로 접근하고 싶다면 코드를 아래와 같이 작성한다.
<코드>
#특정 시트명으로 접근
ws4 = wb1.Worksheets("sheet1")
2. 시트 복사/이동
서론에서도 설명한 부분이지만 win32com.client를 사용하면 다른 파일 간의 시트 이동/복사가 가능하다.
(참고로 엑셀 OpenPyxl 라이브러리는 다른 파일 간 이동/복사는 불가능 함.)
사용법은 아래와 같다.
먼저 설명을 위해 "data1.xlsx", "data2.xlsx" 다른 파일을 Workbook객체로 각각 생성 함.
wb1 = excel.Workbooks.Open(r"C:\Users\Desktop\VS CODE\Project\17. win32com\data1.xlsx")
wb2 = excel.Workbooks.Open(r"C:\Users\Desktop\VS CODE\Project\17. win32com\data2.xlsx")
그 다음 아래와 같이 코드를 작성해보았다.
wb1.Worksheets("test").Copy(Before=wb2.Worksheets("Sheet1"))
위 코드의 의미는 첫번째 Workbook(wb1)의 시트 중 "test"라는 이름을 가진 시트를 두번째 Workbook(wb2)로 복사한다는 의미이다.
Copy 내부의 Before라는 파라미터는 시트의 복사위치이다. 두번째 Workbook(wb2)의 시트 중 "Sheet1"이라는 시트의 앞에 복사한다는 의미. 아래 결과를 확인해보자
Copy 대신 Move를 사용하면 시트 복사가 아닌 시트 이동이 된다는 점 참고하자!
3. 시트 삭제
아래와 같이 코드를 작성하고 ws1이 "Sheet1"이라는 시트에 대한 변수라고 하자.
<코드>
wb1 = excel.Workbooks.Open(r"C:\Users\Desktop\VS CODE\Project\17. win32com\data1.xlsx")
ws1 = wb1.Worksheets.Add()
<결과>
위에서 "Sheet1"을 삭제하려면 ws1을 지우는 코드를 작성하면 된다.
<코드>
#ws1 Sheet 변수 삭제(실제 시트 삭제 됨)
ws1.Delete()
<결과>
만약, "test" Sheet를 삭제하고 싶다면 아래와 같이 코드를 작성한다. 물론 실행되진 않는다. 엑셀 파일에서는 최소 1개 시트가 있어야하기 때문에 위 이미지 기준으로는 오류가 발생한다. 만약, 여러 시트 중 특정 시트만 삭제하고 싶다면 해당 방법을 참고하면 된다.
<코드>
ws2 = wb1.Sheets("test")
ws2.Delete()
<결과>
4. 시트 이름 변경
시트명을 바꾸려면 WorkSheet 개체의 .Name 속성을 활용하면 된다. 아래 코드는 위 이미지에서 "test" 라는 WorkSheet를 변수로 설정하고 이름을 바꾸는 코드이다.
<코드>
ws2 = wb1.Sheets("test")
ws2.Name = "시트명 이름 변경"
<결과>
'코딩 > 업무자동화' 카테고리의 다른 글
[파이썬/업무자동화] win32com.client 사용해서 엑셀 차트 다루기 (0) | 2021.12.22 |
---|---|
[책 소개] 사장님 몰래 하는 파이썬 업무자동화 (2) | 2021.12.20 |
[파이썬/업무자동화] win32com.client 모듈을 활용한 Outlook 메일 자동보내기 (0) | 2021.12.07 |
[파이썬/업무자동화] win32com.client 사용해서 엑셀 사용하기 기초 (0) | 2021.11.23 |
[파이썬/업무자동화] openpyxl - Cell의 데이터를 지우는 3가지 방법 (0) | 2021.11.17 |