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

    ....