Python openpyxl 시트 추가, 삭제 등 9가지 조작 방법

Python으로 openpyxl을 다룰 때 시트 조작이 빠질 수 없죠? Python openpyxl 시트 추가, 시트 삭제, 시트 이름 변경, 시트 위치 변경, 시트 복사 등 시트와 관련된 기능들을 함께 알아보도록 하겠습니다.

Python openpyxl 시트 조작 방법 개요

기존에 있던 엑셀 파일의 시트 위치를 변경하거나 이름을 바꾸거나, 새로운 시트를 추가하거나, 기존의 시트를 삭제하는 경우가 있습니다. 이 모든 것은 openpyxl로 가능합니다. 어떻게 할 수 있는지 하나씩 확인해 보겠습니다.

시트 불러오기

시트 이름으로 시트 불러오기

특정 시트의 이름으로 시트를 불러오는 방법은 다음과 같이 워크북 뒤에 [] 안에 시트 이름을 적어주면 됩니다.

ws = wb['Sheet']
Python

과거에는 get_sheet_by_name 이라는 메서드를 사용했는데, DeprecationWarning이 뜨면서 위의 예시와 같이 사용하라고 안내해 줍니다.

시트 인덱스값으로 특정 시트 불러오기

특정 인덱스값을 사용해서 시트를 불러오고 싶다면, 워크북의 속성 worksheets의 인덱스 값을 활용해서 작업시트를 얻을 수 있습니다.

ws = wb.worksheets[0]
Python

활성화된 시트 불러오는 방법

WorkSheet(작업시트)의 줄임말로 변수명은 ws로 많이 사용합니다. 워크북에서 활성화된 시트는 active 값으로 얻을 수 있습니다.

ws = wb.active
Python

특정 시트를 활성화 상태로 만드는 법

활성화된 시트를 얻는 방법은 위에 소개했습니다. 정확하게 반대로 하면 특정 시트를 활성화된 시트로 변경할 수 있습니다. 위에서 본 코드와 반대로 아래와 같이 작성해 주면 됩니다.

wb.active = ws
Python

시트 추가 방법

시트는 create_sheet 메소드를 사용해서 추가할 수 있습니다. 아래와 같이 하면 마지막 시트 다음에 ‘작업시트1’이 추가됩니다.

wb.create_sheet('작업시트1')
Python
그림 1. Python openpyxl 시트 추가: 마지막 시트로 추가
그림 1. Python openpyxl 시트 추가: 마지막 시트로 추가

만약 위치를 지정해서 시트를 추가하고 싶다면, 시트의 인덱스 번호를 지정해 주면 됩니다. 아래와 같이 0번 인덱스로 잡아주면 첫 시트로 ‘작업시트1’이 추가되며, 기존의 시트는 인덱스 1 이하로 밀립니다. 여기에서 시트의 인덱스 번호는 0번부터 시작합니다. 즉, 0번 인덱스는 제일 첫 시트를 의미합니다.

wb.create_sheet('작업시트1', 0)
Python
그림 2. Python openpyxl 시트 추가: 첫번째 시트로 추가
그림 2. Python openpyxl 시트 추가: 첫번째 시트로 추가

기존 시트 앞에 2개의 시트를 추가하고, 마지막에 한 개의 시트를 추가하고 싶다면 다음과 같이 하면 됩니다.

wb.create_sheet('작업시트1', 0)
wb.create_sheet('작업시트2', 1)
wb.create_sheet('작업시트3')
Python

위와 같이 작업하면 아래 그림과 같이 시트가 배치된 것을 확인할 수 있습니다.

그림 3. Python openpyxl 시트 추가: 복합 예시
그림 3. Python openpyxl 시트 추가: 복합 예시

시트 삭제 방법 2가지

시트를 삭제하는 방법에는 2가지가 있습니다. 하나는 워크북의 remove 메서드를 사용하는 방법이고, 다른 하나는 del 명령어를 사용하는 방법입니다. 다음의 라인 2과 라인 4은 동일한 기능을 수행합니다. del 사용시에는 아래 코드와 같이 반드시 시트명을 사용해서 삭제하시기 바랍니다. worksheets를 활용한 인덱스 사용은 불가능합니다.

ws = wb['작업시트2']
wb.remove(ws)
# 또는
del wb['작업시트2']
Python

그림 3과 같은 상태에서 작업시트2를 삭제하면 그림 4와 같이 됩니다.

그림 4. Python openpyxl 시트 삭제: 작업시트2 삭제 결과
그림 4. Python openpyxl 시트 삭제: 작업시트2 삭제 결과

참고로, remove_sheet 메서드는 레거시이며 사용할 때 DeprecationWarning을 만나게 됩니다. 아래 그림에서도 제가 안내한 것과 같이 remove 메서드를 사용하거나 del 명령어를 사용하라고 알려주네요.

그림 5. remove_sheet 메서드 DeprecationWarning 메시지
그림 5. remove_sheet 메서드 DeprecationWarning 메시지

시트 이름 변경

title 속성을 사용해서 작업시트의 이름을 바꿀 수 있습니다.

ws = wb['Sheet']
ws.title = '작업시트4'
Python

아래와 같이 위의 그림 5에서의 2번째 시트 이름인 Sheet가 작업시트4로 변경된 것을 확인할 수 있습니다.

그림 6. Python openpyxl 시트 이름 변경
그림 6. Python openpyxl 시트 이름 변경

시트 위치 변경

특정 시트의 위치를 옮겨야 하는 경우가 있습니다. 워크북의 move_sheet 메서드를 사용하면 됩니다. 첫번째 파라미터로 작업시트를 넣어주고, 두번째 파라미터에는 오프셋을 넣어줍니다. 오프셋은 양수를 쓰면 오른쪽으로 이동하고, 음수를 쓰면 앞으로 이동합니다. 몇 칸이나 이동할 것인지를 숫자로 넣어주면 됩니다.

아래와 같이 하면 작업시트3이 왼쪽으로 한 칸 이동해서 작업시트1과 작업시트4 사이에 위치하게 됩니다.

wb.move_sheet(wb['작업시트3'], -1)
Python

그림 6의 상태에서 위의 코드를 실행하면 그림 7과 같이 작업시트1, 3, 4의 순서로 시트가 배치됩니다.

그림 7. Python openpyxl 시트 위치 변경
그림 7. Python openpyxl 시트 위치 변경

시트 복사

워크북의 copy_worksheet 메서드를 사용해서 시트를 복사할 수 있습니다. 시트를 복사하면 시트 목록 제일 뒤에 복사된 시트가 추가됩니다.

wb.copy_worksheet(wb['작업시트3'])
Python

위의 그림 7과 같은 상태에서 작업시트3을 복사하면 그림 8과 같이 시트목록의 가장 뒤에 복사된 시트가 추가됩니다.

그림 8. Python openpyxl 시트 복사
그림 8. Python openpyxl 시트 복사

정리

활성화된 시트 얻기, 특정 시트를 활성화 상태로 바꾸기, 인덱스를 사용해서 시트 얻기, 시트 이름으로 시트 얻기, 시트 추가, 시트 삭제, 시트 위치 변경, 시트 복사까지 시트와 관련된 활동을 모두 살펴봤습니다. openpyxl을 활용한 시트 작업에 도움이 되길 바랍니다.

관련 자료

Workbook 소스 코드openpyxl Tutorial 문서를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment