본문 바로가기

코딩/업무자동화

[파이썬/업무자동화] openpyxl - Cell의 데이터를 지우는 3가지 방법

반응형

※ OpenPyxl 관련 포스팅 모음

2021.03.19 - [코딩/업무자동화] - [파이썬/업무자동화] Openpyxl로 엑셀 함수 사용하기, 엑셀 수식 넣기

2021.08.21 - [코딩/업무자동화] - [파이썬/업무자동화] Openpyxl 통해 엑셀 함수 사용하기 2편

2021.08.30 - [코딩/업무자동화] - [파이썬/업무자동화] 엑셀에 입력 된 파일명 따라 이미지 삽입하기 - openpyxl

2021.10.04 - [코딩/업무자동화] - [파이썬/업무자동화] openpyxl.style 사용법 정리

2021.10.16 - [코딩/업무자동화] - [파이썬/업무자동화] openypyxl 통해 엑셀 조건부 서식 적용하기

2021.11.09 - [코딩/업무자동화] - [파이썬/업무자동화] openpyxl 시트 조작 방법 4가지


 

이번 포스팅은 openpyxl을 통해  Cell의 data를 지우는 방법에 대해 3가지 방법을 정리 해본다.

 

 

1. 공백을 입력하여 지우는 방법

 

  첫번째 방법은 간단하다. Cell의 위치값에 ""을 입력하는 것이다. 사실 삭제라기 보단 Cell에 공백을 입력하는 방법이라고 할 수 있다. 아래 예시를 들어 코드를 작성해보자.

 

 

  위 예시에서 짝수만 삭제하려면 어떻게 해야할까?

 

<코드>

import openpyxl as op

#Workbook 객체 생성
wb = op.load_workbook("./Project/16. openpyxl 차트, 피벗/delete_test.xlsx")
#활성화 된 Sheet를 객체로 생성
ws = wb.active
#ws에서 데이터범위 설정
rng = ws["A1:C4"]

#튜플에 대한 for 문 
for row_data in rng:
    print(row_data)
    for data in row_data:
        #해당 data가 2로 나눈 나머지가 0이면 공백처리
        if (data.value % 2) == 0:
            data.value =""
 

#Workbook 객체 저장 
wb.save("./Project/16. openpyxl 차트, 피벗/delete_result.xlsx")

 

코드에 대한 설명을 아래와 같이 요약.

 

-. rng라는 변수를 ws["A1:C4"]로 지정하여 출력해보면 아래와 같이 2차원 튜플인 것을 확인할 수 있다.

((<Cell 'test'.A1>, <Cell 'test'.B1>, <Cell 'test'.C1>), (<Cell 'test'.A2>, <Cell 'test'.B2>, <Cell 'test'.C2>), (<Cell 'test'.A3>, <Cell 'test'.B3>, <Cell 'test'.C3>), (<Cell 'test'.A4>, <Cell 'test'.B4>, <Cell 'test'.C4>))

 

-. 위 튜플이 2차원이므로 다중 for문(for문 2개)를 활용하면 모든 요소를 개별적으로 뽑아낼 수 있다.

-. 위 2번째 for문의 data를 출력해보자. 아래와 같이 개별적인 요소로 출력된다. 따라서, data.value는 각 개별적 요소의 실제 값인 것이다.

 

<Cell 'test'.A1>
<Cell 'test'.B1>
<Cell 'test'.C1>
<Cell 'test'.A2>
<Cell 'test'.B2>
<Cell 'test'.C2>
<Cell 'test'.A3>
<Cell 'test'.B3>
<Cell 'test'.C3>
<Cell 'test'.A4>
<Cell 'test'.B4>
<Cell 'test'.C4>

 

-. 위 값을 if문을 통해 2로 나눈 나머지가 0인 값만 공백처리해주면 아래 결과처럼 짝수를 지울 수 있다.

 

 

 

<결과>

 

 

 

2. delete_rows, delete_cols 사용하기

 

 

  2번째 방법은 Worksheet 객체를 통해 delete_rows, delete_cols를 사용하는 것이다. delete_rows는 행 기준, delete_cols는 열 기준으로 행, 열을 모두 삭제해버린다. 아래 코드 및 결과를 확인해보자.

 

 

1) 행 기준으로 지우기

 

  delete_rows(첫 행 시작값, 시작부터 몇개까지)을 입력하면 아래 이미지와 같이 행 전체가 삭제된다. 괄호의 (1,2)는 1행부터 시작해서 2번째 행까지라는 의미이다. 숫자 2는 2번째 행을 의미하는 것이 아니라 offset과 같은 개념이다.(시작행부터 몇개까지)

  

 

<코드>

import openpyxl as op

#Workbook 객체 생성
wb = op.load_workbook("./Project/16. openpyxl 차트, 피벗/delete_test.xlsx")
#활성화 된 Sheet를 객체로 생성
ws = wb.active

ws.delete_rows(1,2)

wb.save("./Project/16. openpyxl 차트, 피벗/delete_result.xlsx")

 

 

<결과>

 

 

2) 열 기준으로 지우기

 

 

-. 열 기준으로 지울 땐 delete_rows(첫 열 시작값, 시작부터 몇개까지)이다. 아래 코드의 delete_cols(2,1)는 2열부터 1개열까지 삭제한다는 의미이므로 두번째 열만 제거된다.

 

 

<코드>

ws = wb.active

ws.delete_cols(2,1)

wb.save("./Project/16. openpyxl 차트, 피벗/delete_result.xlsx")

 

<결과>

 

 

 

3. 시트 통째로 지우고 재생성하기

 

 

  한 시트의 데이터를 모두 삭제하려면 어떻게 해야할까? 물론 1번, 2번 내용과 cell data를 모두 공백처리하거나, 모든 행과 열을 날려버리는 것도 방법이다. 어짜피 날릴거 시트를 통째로 날리고 다시 똑같은 이름으로 생성하는 방법도 있다.

 

 

<코드>

import openpyxl as op

#Workbook 객체 생성
wb = op.load_workbook("./Project/16. openpyxl 차트, 피벗/delete_test.xlsx")
#'test'라는 이름을 가진 Sheet를 객체로 생성
ws = wb['test']
#test 시트 삭제
wb.remove(ws)
#test 시트 재생성
wb.create_sheet('test')

wb.save("./Project/16. openpyxl 차트, 피벗/delete_result.xlsx")

 

 

728x90