본문 바로가기
Software/Python

[Openpyxl] 3. Cell 영역

by 리미와감자 2024. 1. 24.

3. Cell 영역

 

1줄씩 데이터 넣기

 

from openpyxl import Workbook
from random import *

wb = Workbook() # 새 워크북 생성
ws = wb.active # 현재 활성화된 Sheet를 가져옴

# 1줄씩 데이터 넣기
ws.append(["번호", "영어", "수학"])
for i in range(1, 11):
    ws.append([i, randint(0, 100), randint(0, 100)])

 

 

  • append : 첫 행부터 차례로 아래 방향으로 삽입.

 

 

특정 셀 영역 가져오기

 

영어 열 가져오기

 

col_B = ws["B"] # 영어 column만 가져오기
# print(col_B)
for cell in col_B:
    print(cell.value)

 

영어
44
32
91
52
42
90
93
68
74
62

 

 

영어, 수학 열 함께 가져오기

 

col_range = ws["B:C"] # 영어, 수학 column 함께 가져오기
# print(col_range)
for cols in col_range:
    for cell in cols:
        print(cell.value)

 

 

영어
75
1
64
15
13
83
15
42
41
27
수학
32
26
93
58
32
21
99
88
36
94

 

 

첫 번째 행(Title) 가져오기

 

row_title = ws[1]
for cell in row_title:
    print(cell.value)

 

 

번호
영어
수학

 

 

특정 행 영역(2번째 행에서 6번째 행까지) 값 가져오기

 

row_range = ws[2:6] # 1번째 행인 title를 제외하고, 2번째 행에서 6번째 행까지 가져오기
for rows in row_range:
    for cell in rows:
        print(cell.value, end=" ")
    print()

 

 

1 95 47 
2 63 92 
3 3 69 
4 94 94 
5 81 67

 

 

특정 행 영역(2번째 행에서 마지막 행까지) 값 가져오기

 

row_range = ws[2:ws.max_row] # 2번째 행에서 마지막 행까지 가져오기
for rows in row_range:
    for cell in rows:
        print(cell.value, end=" ") # 셀의 값
    print()

 

1 80 23 
2 3 47 
3 73 41 
4 70 57 
5 42 35 
6 32 88 
7 0 20 
8 61 52 
9 62 27 
10 59 97

 

 

특정 행 영역(2번째 행에서 마지막 행까지) 좌표 가져오기

 

row_range = ws[2:ws.max_row] # 2번째 행에서 마지막 행까지 가져오기
for rows in row_range:
    for cell in rows:
        print(cell.coordinate, end=" ") # 셀의 좌표
    print()

 

 

A2 B2 C2 
A3 B3 C3 
A4 B4 C4 
A5 B5 C5 
A6 B6 C6 
A7 B7 C7 
A8 B8 C8 
A9 B9 C9 
A10 B10 C10 
A11 B11 C11

 

 

특정 행 영역(2번째 행에서 마지막 행까지) 좌표 슬라이싱해서 가져오기

 

from openpyxl.utils.cell import coordinate_from_string

row_range = ws[2:ws.max_row] # 2번째 행에서 마지막 행까지 가져오기
for rows in row_range:
    for cell in rows:
        xy = coordinate_from_string(cell.coordinate) # 슬라이싱된 셀의 좌표
        print(xy, end=" ")
        # print(xy[0], end="") # A
        # print(xy[1], end=" ") # 1
    print()

 

('A', 2) ('B', 2) ('C', 2) 
('A', 3) ('B', 3) ('C', 3) 
('A', 4) ('B', 4) ('C', 4) 
('A', 5) ('B', 5) ('C', 5) 
('A', 6) ('B', 6) ('C', 6) 
('A', 7) ('B', 7) ('C', 7) 
('A', 8) ('B', 8) ('C', 8) 
('A', 9) ('B', 9) ('C', 9) 
('A', 10) ('B', 10) ('C', 10) 
('A', 11) ('B', 11) ('C', 11)

 

  • 슬라이싱 좌표를 사용하기 위해서 coordinate_from_string을 import한다.
  • 주석된 print문을 해제하면 바로 위의 결과와 똑같다.

 

전체 영역 가져오기

 

전체 행 가져오기

 

# 전체 rows
# print(tuple(ws.rows))
for row in tuple(ws.rows):
    print(row[0].value, row[1].value, row[2].value)

 

 

# 전체 rows
for row in ws.iter_rows():
    print(row[0].value, row[1].value, row[2].value)

 

 

번호 영어 수학
1 56 50
2 57 25
3 80 69
4 43 47
5 40 1
6 40 61
7 62 26
8 64 28
9 94 4
10 99 29

 

  • iter_rows()를 주로 사용한다.

 

 

전체 열 가져오기

 

# 전체 columns
# print(tuple(ws.columns))
for column in tuple(ws.columns):
    print(column[0].value)

 

 

# 전체 columns
for column in ws.iter_cols():
    print(column[0].value)

 

 

번호
영어
수학

 

  • 전체 열을 가져온 뒤, 첫 번째 행만 print했다.

 

 

특정 셀 영역 가져오기(가장 많이 사용함)

 

# 2번째 줄부터 11번째 줄까지, 2번째 열부터 3번째 열까지
for row in ws.iter_rows(min_row=2, max_row=11, min_col=2, max_col=3): # 한 행씩 가져오기
    # print(row)
    print(row[0].value, row[1].value) # 영어, 수학

 

 

45 55
51 58
72 11
81 100
18 65
54 8
7 93
36 88
72 12
65 29

 

 

# 1번째 줄부터 15째 줄까지, 1번째 열부터 3번째 열까지
for col in ws.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3): # 한 열씩 가져오기
    print(col[0].value, col[1].value, col[2].value, col[3].value, col[4].value)

 

 

번호 1 2 3 4
영어 100 96 4 2
수학 19 47 97 26

 

  • 보통 iter_rows(), iter_cols()로 영역을 설정해서 많이 사용한다.
  • iter_rows(), iter_cols() 내부의 파라미터 min, max의 default는 각각 최소, 최대값이다.

 

 

댓글