본문 바로가기

코딩/업무자동화

[파이썬/업무자동화] win32com.client 사용해서 엑셀 영역 선택하는 방법 4가지 - Range, UsedRange, CurrentRegion, SpecialCells

반응형

* 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 엑셀 파일 저장 및 옵션


 

  이번 포스팅에서는 엑셀 셀 범위 선택에 대해 공부한 내용을 정리했다. 먼저 아래코드와 같이 엑셀 "통합문서"를 생성하고 임의의 문자 데이터를 입력. 아래 코드는 이전 포스팅에서도 충분히 설명하였으므로 따로 설명은 생략한다.

 

import win32com.client

excel = win32com.client.Dispatch("Excel.Application") #엑셀 App 객체 생성
excel.Visible = True #실행과정 보이게

wb = excel.Workbooks.Add() #Workbook 새로 생성(통합문서)
ws = wb.ActiveSheet #활성화 된 시트 "Sheet1"을 객체로 생성

#임의의 데이터 입력
ws.cells(1,1).Value = "text1"
ws.cells(1,2).Value  = "text2"
ws.cells(1,3).Value = "text3"
ws.cells(2,1).Value = "text4"
ws.cells(2,3).Value = "text5"
ws.cells(3,2).Value = "text6"

 

<결과>

 

아래 설명할 내용들은 위 생성한 엑셀 데이터를 기준으로 설명한다.

 

  엑셀에는 Cell의 범위를 선택하는 여러가지 방법이 있다. 엑셀 VBA에서는 .Range, .UsedRange, CurrentRegion, Specialcells과 같은 방법들을 제공한다. 파이썬의 win32com.client를 활용하면 마찬가지로 위 속성들을 사용할 수 있다.

 

  엑셀 VBA에 대한 내용이 궁금한 사람은 아래 링크를 참고 하면 된다.

(VBA 참고 링크 : 2021.09.07 - [코딩/엑셀,VBA] - [엑셀/VBA] SpecialCells, CurrentRegion, UsedRange)

 

[엑셀/VBA] SpecialCells, CurrentRegion, UsedRange

엑셀을 다뤄본 사람이라면 알겠지만 엑셀에는 Cell을 선택하는 다양한 방법이 존재한다. 참고링크를 보면서 알게 된 내용이지만 Cell을 선택하는 방법 중 Range를 각각 Select하는 방법은 VBA 프로그

ybworld.tistory.com

 

 

1) .Range

 

  .Range는 가장 기본적인 방법이다. 위 이미지에서 "A1:C3"영역을 선택하려면 아래와 같이 코드를 작성한다. 코드를 작성하여 실행하면 결과와 같이 "A1:C3" 영역이 선택되게 된다.

 

#범위선택1 : Range
ws.Range("A1:C3").Select()

 

<결과>

 

 

2) .UsedRange

 

  .UsedRange는 Worksheet에서 사용 된 영역을 모두 선택 처리한다. 만약 데이터가 계속 수정되어 선택하는 영역이 바뀌어야 한다면 해당 코드를 사용하면 된다.

 

<사용예시1>

#범위선택2 : UsedRange
ws.UsedRange()

 

위와 같이 코드를 작성해서 실행해보면 아래처럼 2차원 튜플형태의 데이터가 출력된다.

 

<결과>

(('text1', 'text2', 'text3'), ('text4', None, 'text5'), (None, 'text6', None))

 

만약, "1) .Range"와 같이 실제 엑셀에서 선택하게 하려면 Select( ) 함수를 끝에 사용하면 된다. 

( 위 1) Range에서 봤던 결과와 동일한 결과임)

 

<사용예시2>

#범위선택2 : UsedRange 사용하여 실제 영역 설정
ws.UsedRange.Select()

 

<결과>

 

 

3) .CurrentRegion

 

  위에서 다뤘던 Range와 UsedRange는 ws.Range, ws.UsedRange와 같이 "." 앞 코드가 WorkSheet 객체여야 한다. .CurrentRegion은 앞 객체가 Range 객체여야 한다. 아래 코드를 통해 확인해보자.

 

<사용예시1>

#범위선택3 : CurrentRegion , 튜플 반환
ws.Range("A:D").CurrentRegion()

 

<결과>

(('text1', 'text2', 'text3'), ('text4', None, 'text5'), (None, 'text6', None))

 

  UsedRange와 마찬가지로 사용자가 설정한 Range 내에서 데이터가 입력 된 부분만 선택한다. Select( ) 를 하면 직접선택 CurrentRegion( ) 를 사용하면 해당 영역의 사용 데이터를 튜플로 반환한다.

 

<사용예시2>

#범위선택3 : CurrentRegion 직접 영역 선택
ws.Range("A:D").CurrentRegion.Select()

 

<결과>

 

 

4) SpecialCells

 

  SpecialCells은 어떤 조건에 따른 영역선택을 할 수 있다. 위 엑셀 이미지에서 데이터가 있는 Cell만 선택한다던가, 빈 공간만 선택하게 한다정를 예로 들 수 있다.

 

<사용예시1 : 데이터가 있는 연속 된 영역 모두 선택>

#범위선택4 : SpecilCells
ws.UsedRange.SpecialCells(12).Value

 

<결과>

(('text1', 'text2', 'text3'), ('text4', None, 'text5'), (None, 'text6', None))

 

사실상 위 결과는 ws.UsedRange( ) 와 동일하다.

 

 

<사용예시2 : 데이터가 없는 빈 셀만 선택>

#범위선택4 : SpecilCells
ws.UsedRange.SpecialCells(4).Select()

 

<결과>

 

  SpecialCells(4)를 입력하면 UsedRange(데이터가 입력 된 연속 된 사용 영역) 중 빈 셀만 선택하게 된다.

(B2, A3, C3)

 

 

<사용예시3 : 사용영역 중 마지막 셀 선택>

#범위선택4 : SpecilCells
ws.UsedRange.SpecialCells(11).Select()

 

<결과>

 

SpecialCells(11)은 영역 중 마지막 셀을 선택한다. 즉 C3이다.

 

  위에서 설명한 3개 예시와 같이 SpecialCells 내부의 숫자 값에 따라 선택 영역의 옵션을 선택할 수 있다. 내부 숫자값에 따른 옵션은 Microsoft 에서 제공하는 공식 문서를 확인하면 된다. 아래 이미지는 그 내용이다. 

 

 

 

728x90