Win32com으로 엑셀 다루기
- Python/Excel 다루기
- 2020. 8. 4.
Win32com 이라는 모듈이 있습니다. 윈도우 프로그램을 컨트롤 하는 모듈인데
Win32com 모듈로 엑셀을 켠 상태로 다룰 수 있다 해서 한 번 해보았습니다.
엑셀을 켠 상태에서 할 수 있는게 장점이자 단점이 될 수도 있다는 생각이 들지만 개인적으로는
눈으로 상황을 볼 수 있어서 코딩 수정하기가 편해서 좋았습니다.
엑셀 구동
엑셀을 파이썬으로 구동을 해보겠습니다.
일단 새파일을 만들어보겠습니다.
#엑셀 구동&새파일 생성
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible =True
wb = excel.Workbooks.Add()
ws = wb.Worksheets("Sheet1')
excel.Visable 은 엑셀 시각화를 할지 안할지를 결정하는 코드입니다. True로 하면 윈도우에서 excel이 실행됩니다.
wb는 새파일을 만드는 코드고 ws는 활성화시트를 선택하는 코드입니다.
코드 실행을 하면 엑셀이 나오는 것을 볼 수 있습니다.
이 엑셀 파일을 test로 저장하겠습니다.
기본적으로 시트는 'Sheet1'이 있지만 다른 시트를 추가하고 싶다면 다음과 같이 입력합니다.
ws_newsheet = wb.Worksheets.Add()
ws_newsheet.Name = 'Test'
기존 파일을 열고 싶다면 파일의 경로를 입력하면 됩니다. 위의 저장한 test 파일을 불러보겠습니다.
filename = "C:\\test.xlsx"
wb = excel.Workbooks.Open(filename)
저는 filename을 따로 정의해서 넣었지만 괄호 안에 바로 경로를 넣어도 됩니다.
값 넣기
값을 넣으려면 두가지 방법이 있습니다.
- 범위설정해서 값넣기
- 좌표설정해서 값넣기
좌표로 넣는것을 안 쓰는 건 아니지만 보통 범위설정해서 값을 넣는게 편합니다.
먼저 범위로 값을 넣어보겠습니다.
ws.Range('A1:C3').Value = 1
ws.Range('D1').Value = 3
A1:C3 의 범위에 1을 넣고 D1의 범위에는 3을 넣었습니다.
Range를 쓰면 범위에 값을 넣는것도 있지만 내가 원하는 위치의 행렬을 쉽게 입력할 수 있어서 굉장히 편합니다.
좌표로 값을 넣어보겠습니다.
ws.Cells(5,4).Value =10
5 row의 4 column 자리에 10이 입력되는 것을 볼 수 있습니다. 단순 매크로를 실행하고 싶으면 for문을 이용해야하는데 그럴 경우 좌표를 index로 설정해서 값 입력을 요청하면 단순 메크로를 할 수 있습니다.
AutoFill
엑셀 기능중에 1~10을 입력할때 일일히 입력하지 않고 드래그를 통해서 1~10을 입력할 수 있었는데
파이썬으로도 할 수 있습니다.
ws.Range('C1:D1').Value = 1
ws.Range('C2:D2').Value = 2
ws.Range('C1').AutoFill(ws.Range('C1:C10'))
ws.Range('D1:D2').AutoFill(ws.Range('D1:D10'))
비교를 위해 다른 C행은 1만 AutoFill을 했고 D행은 1,2로 AutoFill을 했습니다.
복사, 붙여넣기
복사 붙여넣기도 가능합니다.
Copy와 Paste 함수를 이용하는데 Paste의 파라미터 Destination을 쓰면 Select를 이용하지 않고 바로 붙여넣기를 할 수가 있습니다. 잘 안되서 저는 Select를 이용해 복사,붙여넣기를 해봤습니다. 이것도 역시 복사한값에 아무값이 없는경우 예외로 인식해 오류가 많이 발생합니다.
사실 안 발생할 때도 있어서 저도 이게 어떤 메커니즘으로 하는지 아직은 잘 몰라서
혹시 아시는분 있으시면 알려주세요~
ws.Range('D1:D10').Copy()
ws.Range('E1:E10').Select()
ws.Paste()
D행을 복사해서 E행에 붙여놓았습니다.
행삽입
빈 행을 중간에 삽입하고 싶을 때가 있습니다.
그럴 때는 Insert()를 이용합니다.
ws.Rows(5).Insert()
Row 5에 빈행을 삽입했습니다.
엑셀파일 저장 및 종료
wb.SaveAs('c:\\Users\\Seong\\end.xlsx') #다른이름으로 저장
wb.Save() #기존파일경로에 저장
excel.Quit()
다른이름으로 하고 싶으면 SaveAs에서 경로를 새로 정하고
그냥 저장하려면 Save() 로 합니다.
엑셀을 끝내려면 Quit 으로 마무리하면 되겠습니다.
이상으로 포스팅을 마치겠습니다.
'Python > Excel 다루기' 카테고리의 다른 글
openpyxl로 엑셀 파일(.xlsx) 불러오기 (0) | 2020.07.29 |
---|