Win32com으로 엑셀 다루기

반응형
반응형

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

Designed by JB FACTORY