이번 포스팅에서는
파이썬을 활용해서 엑셀의 셀 영역을
다루는 방법에 대해서 알아보겠습니다.
우선, 간단한 엑셀 데이터를
생성하겠습니다.
예제 데이터 생성하기
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()
다음 포스팅에서는
좀 더 상세한 셀 영역 다루기를
알아보겠습니다.
'Python > openpyxl' 카테고리의 다른 글
파이썬을 활용한 엑셀 셀 영역 다루기2 (0) | 2022.07.11 |
---|---|
파이썬을 활용한 엑셀 행 & 열 삽입 및 삭제하기 (2) | 2022.07.10 |
파이썬을 활용한 원하는 위치의 엑셀 데이터 출력하기 (0) | 2022.07.09 |
파이썬을 활용한 엑셀 시트에 값 입력하기 (0) | 2022.07.09 |
파이썬을 활용한 엑셀 시트 다루기 (0) | 2022.07.09 |
댓글