Python/openpyxl

파이썬을 활용한 엑셀 셀 영역 다루기1

찐남 2022. 7. 10. 00:18

이번 포스팅에서는

파이썬을 활용해서 엑셀의 셀 영역을

다루는 방법에 대해서 알아보겠습니다.

 

우선, 간단한 엑셀 데이터를 

생성하겠습니다.

 

예제 데이터 생성하기

10명의 학생에 대한 국어, 영어, 수학 성적을 

생성하는 예제 데이터입니다.

import openpyxl as xls
from random import * 

wb = xls.Workbook()
ws = wb.active

# 데이터 입력하기 
ws.append(["학번", "국어", "영어", "수학"])
for i in range(1, 10 + 1):
    ws.append([i, randint(1, 100), randint(1, 100), randint(1, 100)])

# 엑셀 파일로 저장하기
wb.save("C:/RPA/begin.xlsx")

# 입력한 데이터 출력하기
for i in range(1, ws.max_row + 1):
    for j in range(1, ws.max_column + 1):
        print(ws.cell(row = i, column = j).value, end = " ")
    print()

 

 

특정 칼럼에 있는 모든 데이터 가져오기

위의 생성된 예제 데이터에서

B칼럼에 있는 모든 데이터를

가져오는 과정에 대해서 

알아보겠습니다.

colB = ws["B"]
print(colB)

colB에는 셀의 주소 값들이

튜플 형태로 저장되어 있음을

알 수 있습니다.

 

튜플의 각 원소를 하나씩 가져와서

출력해 보겠습니다.

for i in colB:
    print(i.value)

 

연속된 칼럼에 있는 모든 데이터 가져오기

국어, 영어, 수학 점수가 들어있는

(B, C, D 칼럼의 값을)

가져와서 출력해 보겠습니다.

 

colBCD = ws["B:D"]
print(colBCD)

 

colBCD에는 B ~ D칼럼의 주소 값이

이중 튜플 형태로 저장되어 있습니다.

 

따라서, 출력하기 위해서는

이중 반복문을 활용해야겠네요.

 

for row in colBCD:
    for col in row:
        print(col.value, end = " ")
    print()

 

연속된 열에 있는 모든 데이터 가져오기

2 ~ 4번째 열에 있는 데이터를

가져오겠습니다.

row234 = ws[2:4]
print(row234)

역시 이중 튜플 형식으로

되어 있습니다.

다만, 튜플을 구성하는 요소의 순서가

칼럼 기준으로 가져왔을 때와는

조금 다릅니다.

 

for row in row234:
    for col in row:
        print(col.value, end = " ")
    print()

 

일반화하여 모든 셀의 데이터 가져오기

특정 칼럼의 영역 혹은

특정 열의 영역이 아니라

데이터가 있는 모든 영역을 

선택하여 가져오는 방법에 대해서

알아보겠습니다.

maxRow = ws[2:ws.max_row]

for row in maxRow:
    for col in row:
        print(col.value, end = " ")
    print()

 

 

데이터가 있는 셀의 주소 반환하기

1. coordinate 함수 활용

바로 위에 코드와 매우 유사하게

구현할 수 있습니다.

maxRow = ws[2:ws.max_row]

for row in maxRow:
    for col in row:
        print(col.coordinate, end = " ")
    print()

 

영문과 숫자를 각각 구분하여

튜플 형식으로 반환할 수 있습니다.

 

향후 코드를 효율적으로

사용하기 위해서 

영문과 숫자를 각각 반환하는

방안도 알아 두는 게 좋습니다.

 

2. coordinate_from_string 함수 사용

coordinate_from_string 함수는 

utils.cell 매소드 안에 포함되어 있습니다.

maxRow = ws[2:ws.max_row]

for row in maxRow:
    for col in row:
        print(xls.utils.cell.coordinate_from_string(col.coordinate), end = " ")
    print()

 

셀의 주소가 튜플 형식으로 반환되었습니다.

튜플의 첫 번째 요소는 문자, 

튜플의 두 번째 요소는 숫자로 구성되어

조작이 용이합니다.

 

해당 주소를 이용하여

1번의 방법과 동일하게

출력해 보겠습니다.

 

maxRow = ws[2:ws.max_row]

for row in maxRow:
    for col in row:
        xy = xls.utils.cell.coordinate_from_string(col.coordinate)
        print(xy[0], end = "")   # 셀 주소 중에서 문자 부문 반환
        print(xy[1], end = " ")  # 셀 주소 중에서 숫자 부문 반환
    print()

 

다음 포스팅에서는

좀 더 상세한 셀 영역 다루기를

알아보겠습니다.

 

 

반응형