본문 바로가기
프로그래밍/Python

Python_openpyxl_엑셀_02_셀 관련

by Choraengyi 2021. 1. 30.

1. 셀에 값 삽입, 특정 셀 직접 지정

from openpyxl import Workbook   #openpyxl 모듈의 Workbook 함수 사용 가능하도록 하는 구문

wb = Workbook() #Workbook 생성, 통합문서 생성이라고 생각하면 됨 -> wb 변수에 할당
ws = wb.active  #Workbook 생성 시 최소 한개의 시트가 만들어짐, 활성화된 sheet 가져옴 -> wb 변수의 활성화된 sheet를 ws 에 할당

ws.title = '첫번째 시트' # 활성화된 sheet 인 ws 의 이름을 변경, 결과적으로 sheet 이름이 변경됨

ws.sheet_properties.tabColor = "00FFFF"     # 시트 탭 색깔 변경, 원하는 색상의 RGB 코드 값 넣어줘야 함

ws['A4'] = 4            # 특정 셀에 값 삽입
test1 = ws['A4']        # 엑셀의 셀을 지정해 변수에 대입 가능

print(test1)

wb.save("create_excel_test.xlsx")   # wb 통합문서를 저장하는 명령어, 파일이름 지정 가능

- 결과

더보기

<Cell '첫번째 시트'.A4>

 

2. 셀에 값 삽입, row, column 지정

from openpyxl import Workbook   #openpyxl 모듈의 Workbook 함수 사용 가능하도록 하는 구문

wb = Workbook() #Workbook 생성, 통합문서 생성이라고 생각하면 됨 -> wb 변수에 할당
ws = wb.active  #Workbook 생성 시 최소 한개의 시트가 만들어짐, 활성화된 sheet 가져옴 -> wb 변수의 활성화된 sheet를 ws 에 할당

ws.title = '첫번째 시트' # 활성화된 sheet 인 ws 의 이름을 변경, 결과적으로 sheet 이름이 변경됨

ws.sheet_properties.tabColor = "00FFFF"     # 시트 탭 색깔 변경, 원하는 색상의 RGB 코드 값 넣어줘야 함

test2 = ws.cell(row=5, column=1, value = 5) # 위와 다른 방식으로 row 및 column 으로 지정 하여 값 삽입도 동시에 삽입 가능

print(test2)

wb.save("create_excel_test.xlsx")   # wb 통합문서를 저장하는 명령어, 파일이름 지정 가능

- 결과

더보기

<Cell '첫번째 시트'.A5>

 

3. 셀에 값 삽입, 반복문을 통한 삽입

##### 아래부터는 해당 기능 관련 코드만 보임

for i in range(1,101):  # 1 부터 100까지 반복하기 위한 반복문, row 값
    col_num = 1         # column 값은 1 이며 곧 A 열을 가리킴
    ws.cell(row=i, column=col_num, value = i)   # A열의 1~100 행에 1~100 값 삽입

- 결과

더보기
 100열까지 1씩 존재하며 값 저장됨

  행, 열 모두 반복하도록 한 코드

import random			# 난수 발생 시키는 모듈 호출
for r in range(1,21):  # 1 부터 100까지 반복하기 위한 반복문, row 값
    for c in range(1,21):         # column 값은 1 이며 곧 A 열을 가리킴
        ws.cell(row=r, column=c, value = random.randrange(1,100))   # A열의 1~100 행에 1~100 의 정수형 랜덤값 삽입
        #random.randrange(1,100) -> 1부터 100까지의 랜덤한 정수값 발생

- 결과

 

4. 셀 값 범위 지정

# 해당 기능 관련 코드만 보임

  위의 정수형 랜덤값 삽입 반복문의 셀 선택, 20열 20행 있음

test_range = ws['C1':'D5']  # C1 부터 D5 까지 선택
print(f"C1 부터 D5 선택 {test_range}")
test_range1 = ws['C']        # C열 선택
print(f"C열 선택 {test_range1}")
test_range2 = ws['A:C']        # A 부터 C열 선택
print(f"A 열부터 C 열 선택 {test_range2}")
test_range3 = ws['W:Z']        # W 부터 Z열 선택
print(f"W 열부터 Z 열 선택 {test_range3}")
test_range4 = ws[5]        # 5번째 행 선택
print(f"5번째 행 선택 {test_range4}")
test_range5 = ws[5:7]        # 5번째 행부터 7번째 행 선택
print(f"5번째 행부터 7번째 행 {test_range5}")
test_range6 = ws[25:27]        # 25번째 행부터 27번째 행 선택
print(f"25번째 행부터 27번째 행 {test_range6}")

- 결과

#이전에 선택된 범위에 대해 다음 범위가 영향을 받는듯 함

##맨처음 C1 부터 D5 까지 선택해서 C 열 선택 시 5열까지 선택됨

##W열부터 Z열 선택 이후 행 범위 출력 시 Z 열까지 선택됨

더보기

C1 부터 D5 선택 ((<Cell '첫번째 시트'.C1>, <Cell '첫번째 시트'.D1>), (<Cell '첫번째 시트'.C2>, <Cell '첫번째 시트'.D2>), (<Cell '첫번째 시트'.C3>, <Cell '첫번째 시트
'.D3>), (<Cell '첫번째 시트'.C4>, <Cell '첫번째 시트'.D4>), (<Cell '첫번째 시트'.C5>, <Cell '첫번째 시트'.D5>))

C열 선택 (<Cell '첫번째 시트'.C1>, <Cell '첫번째 시트'.C2>, <Cell '첫번째 시트'.C3>, <Cell '첫번째 시트'.C4>, <Cell '첫번째 시트'.C5>)

A 열부터 C 열 선택 ((<Cell '첫번째 시트'.A1>, <Cell '첫번째 시트'.A2>, <Cell '첫번째 시트'.A3>, <Cell '첫번째 시트'.A4>, <Cell '첫번째 시트'.A5>), (<Cell '첫번째 시 
트'.B1>, <Cell '첫번째 시트'.B2>, <Cell '첫번째 시트'.B3>, <Cell '첫번째 시트'.B4>, <Cell '첫번째 시트'.B5>), (<Cell '첫번째 시트'.C1>, <Cell '첫번째 시트'.C2>, <Cell '첫번째 시트'.C3>, <Cell '첫번째 시트'.C4>, <Cell '첫번째 시트'.C5>))

W 열부터 Z 열 선택 ((<Cell '첫번째 시트'.W1>, <Cell '첫번째 시트'.W2>, <Cell '첫번째 시트'.W3>, <Cell '첫번째 시트'.W4>, <Cell '첫번째 시트'.W5>), (<Cell '첫번째 시 
트'.X1>, <Cell '첫번째 시트'.X2>, <Cell '첫번째 시트'.X3>, <Cell '첫번째 시트'.X4>, <Cell '첫번째 시트'.X5>), (<Cell '첫번째 시트'.Y1>, <Cell '첫번째 시트'.Y2>, <Cell '첫번째 시트'.Y3>, <Cell '첫번째 시트'.Y4>, <Cell '첫번째 시트'.Y5>), (<Cell '첫번째 시트'.Z1>, <Cell '첫번째 시트'.Z2>, <Cell '첫번째 시트'.Z3>, <Cell '첫번째 시 
트'.Z4>, <Cell '첫번째 시트'.Z5>))

5번째 행 선택 (<Cell '첫번째 시트'.A5>, <Cell '첫번째 시트'.B5>, <Cell '첫번째 시트'.C5>, <Cell '첫번째 시트'.D5>, <Cell '첫번째 시트'.E5>, <Cell '첫번째 시트'.F5>, 
<Cell '첫번째 시트'.G5>, <Cell '첫번째 시트'.H5>, <Cell '첫번째 시트'.I5>, <Cell '첫번째 시트'.J5>, <Cell '첫번째 시트'.K5>, <Cell '첫번째 시트'.L5>, <Cell '첫번째  
시트'.M5>, <Cell '첫번째 시트'.N5>, <Cell '첫번째 시트'.O5>, <Cell '첫번째 시트'.P5>, <Cell '첫번째 시트'.Q5>, <Cell '첫번째 시트'.R5>, <Cell '첫번째 시트'.S5>, <Cell '첫번째 시트'.T5>, <Cell '첫번째 시트'.U5>, <Cell '첫번째 시트'.V5>, <Cell '첫번째 시트'.W5>, <Cell '첫번째 시트'.X5>, <Cell '첫번째 시트'.Y5>, <Cell '첫번째 시트'.Z5>)

5번째 행부터 7번째 행 ((<Cell '첫번째 시트'.A5>, <Cell '첫번째 시트'.B5>, <Cell '첫번째 시트'.C5>, <Cell '첫번째 시트'.D5>, <Cell '첫번째 시트'.E5>, <Cell '첫번째 시
트'.F5>, <Cell '첫번째 시트'.G5>, <Cell '첫번째 시트'.H5>, <Cell '첫번째 시트'.I5>, <Cell '첫번째 시트'.J5>, <Cell '첫번째 시트'.K5>, <Cell '첫번째 시트'.L5>, <Cell 
'첫번째 시트'.M5>, <Cell '첫번째 시트'.N5>, <Cell '첫번째 시트'.O5>, <Cell '첫번째 시트'.P5>, <Cell '첫번째 시트'.Q5>, <Cell '첫번째 시트'.R5>, <Cell '첫번째 시트'.S5>, <Cell '첫번째 시트'.T5>, <Cell '첫번째 시트'.U5>, <Cell '첫번째 시트'.V5>, <Cell '첫번째 시트'.W5>, <Cell '첫번째 시트'.X5>, <Cell '첫번째 시트'.Y5>, <Cell '첫번
째 시트'.Z5>), (<Cell '첫번째 시트'.A6>, <Cell '첫번째 시트'.B6>, <Cell '첫번째 시트'.C6>, <Cell '첫번째 시트'.D6>, <Cell '첫번째 시트'.E6>, <Cell '첫번째 시트'.F6>, <Cell '첫번째 시트'.G6>, <Cell '첫번째 시트'.H6>, <Cell '첫번째 시트'.I6>, <Cell '첫번째 시트'.J6>, <Cell '첫번째 시트'.K6>, <Cell '첫번째 시트'.L6>, <Cell '첫번째 
시트'.M6>, <Cell '첫번째 시트'.N6>, <Cell '첫번째 시트'.O6>, <Cell '첫번째 시트'.P6>, <Cell '첫번째 시트'.Q6>, <Cell '첫번째 시트'.R6>, <Cell '첫번째 시트'.S6>, <Cell '첫번째 시트'.T6>, <Cell '첫번째 시트'.U6>, <Cell '첫번째 시트'.V6>, <Cell '첫번째 시트'.W6>, <Cell '첫번째 시트'.X6>, <Cell '첫번째 시트'.Y6>, <Cell '첫번째 시트'.Z6>), (<Cell '첫번째 시트'.A7>, <Cell '첫번째 시트'.B7>, <Cell '첫번째 시트'.C7>, <Cell '첫번째 시트'.D7>, <Cell '첫번째 시트'.E7>, <Cell '첫번째 시트'.F7>, <Cell '첫번째 시트'.G7>, <Cell '첫번째 시트'.H7>, <Cell '첫번째 시트'.I7>, <Cell '첫번째 시트'.J7>, <Cell '첫번째 시트'.K7>, <Cell '첫번째 시트'.L7>, <Cell '첫번째 시트'.M7>, <Cell '첫번째 시트'.N7>, <Cell '첫번째 시트'.O7>, <Cell '첫번째 시트'.P7>, <Cell '첫번째 시트'.Q7>, <Cell '첫번째 시트'.R7>, <Cell '첫번째 시트'.S7>, <Cell '첫번 
째 시트'.T7>, <Cell '첫번째 시트'.U7>, <Cell '첫번째 시트'.V7>, <Cell '첫번째 시트'.W7>, <Cell '첫번째 시트'.X7>, <Cell '첫번째 시트'.Y7>, <Cell '첫번째 시트'.Z7>)) 

25번째 행부터 27번째 행 ((<Cell '첫번째 시트'.A25>, <Cell '첫번째 시트'.B25>, <Cell '첫번째 시트'.C25>, <Cell '첫번째 시트'.D25>, <Cell '첫번째 시트'.E25>, <Cell '첫
번째 시트'.F25>, <Cell '첫번째 시트'.G25>, <Cell '첫번째 시트'.H25>, <Cell '첫번째 시트'.I25>, <Cell '첫번째 시트'.J25>, <Cell '첫번째 시트'.K25>, <Cell '첫번째 시트
'.L25>, <Cell '첫번째 시트'.M25>, <Cell '첫번째 시트'.N25>, <Cell '첫번째 시트'.O25>, <Cell '첫번째 시트'.P25>, <Cell '첫번째 시트'.Q25>, <Cell '첫번째 시트'.R25>, <Cell '첫번째 시트'.S25>, <Cell '첫번째 시트'.T25>, <Cell '첫번째 시트'.U25>, <Cell '첫번째 시트'.V25>, <Cell '첫번째 시트'.W25>, <Cell '첫번째 시트'.X25>, <Cell '첫 
번째 시트'.Y25>, <Cell '첫번째 시트'.Z25>), (<Cell '첫번째 시트'.A26>, <Cell '첫번째 시트'.B26>, <Cell '첫번째 시트'.C26>, <Cell '첫번째 시트'.D26>, <Cell '첫번째 시
트'.E26>, <Cell '첫번째 시트'.F26>, <Cell '첫번째 시트'.G26>, <Cell '첫번째 시트'.H26>, <Cell '첫번째 시트'.I26>, <Cell '첫번째 시트'.J26>, <Cell '첫번째 시트'.K26>, <Cell '첫번째 시트'.L26>, <Cell '첫번째 시트'.M26>, <Cell '첫번째 시트'.N26>, <Cell '첫번째 시트'.O26>, <Cell '첫번째 시트'.P26>, <Cell '첫번째 시트'.Q26>, <Cell ' 
첫번째 시트'.R26>, <Cell '첫번째 시트'.S26>, <Cell '첫번째 시트'.T26>, <Cell '첫번째 시트'.U26>, <Cell '첫번째 시트'.V26>, <Cell '첫번째 시트'.W26>, <Cell '첫번째 시
트'.X26>, <Cell '첫번째 시트'.Y26>, <Cell '첫번째 시트'.Z26>), (<Cell '첫번째 시트'.A27>, <Cell '첫번째 시트'.B27>, <Cell '첫번째 시트'.C27>, <Cell '첫번째 시트'.D27>, <Cell '첫번째 시트'.E27>, <Cell '첫번째 시트'.F27>, <Cell '첫번째 시트'.G27>, <Cell '첫번째 시트'.H27>, <Cell '첫번째 시트'.I27>, <Cell '첫번째 시트'.J27>, <Cell 
'첫번째 시트'.K27>, <Cell '첫번째 시트'.L27>, <Cell '첫번째 시트'.M27>, <Cell '첫번째 시트'.N27>, <Cell '첫번째 시트'.O27>, <Cell '첫번째 시트'.P27>, <Cell '첫번째  
시트'.Q27>, <Cell '첫번째 시트'.R27>, <Cell '첫번째 시트'.S27>, <Cell '첫번째 시트'.T27>, <Cell '첫번째 시트'.U27>, <Cell '첫번째 시트'.V27>, <Cell '첫번째 시트'.W27>, <Cell '첫번째 시트'.X27>, <Cell '첫번째 시트'.Y27>, <Cell '첫번째 시트'.Z27>))

 

5. Worksheet.iter_rows()
# 지정한 범위의 행 반환

row_num = 10    # 최대 행의 값으로 삽입할 변수 테스트
for row in ws.iter_rows(min_row=2, min_col=2, max_col=5, max_row=row_num):  #읽어올 최소, 최대 행 및 열 지정, 정수형 변수도 입력 가능
    for cell in row:
        print(f"셀 {cell} 의 값은 {cell.value}")    # 셀 정보와 값 출력

- 결과

#행을 기준으로 열을 읽어 나감

더보기

셀 <Cell '첫번째 시트'.B2> 의 값은 87
셀 <Cell '첫번째 시트'.C2> 의 값은 45
셀 <Cell '첫번째 시트'.D2> 의 값은 54
셀 <Cell '첫번째 시트'.E2> 의 값은 38
셀 <Cell '첫번째 시트'.B3> 의 값은 40
셀 <Cell '첫번째 시트'.C3> 의 값은 24
셀 <Cell '첫번째 시트'.D3> 의 값은 36
셀 <Cell '첫번째 시트'.E3> 의 값은 96
셀 <Cell '첫번째 시트'.B4> 의 값은 38
셀 <Cell '첫번째 시트'.C4> 의 값은 26
셀 <Cell '첫번째 시트'.D4> 의 값은 79
셀 <Cell '첫번째 시트'.E4> 의 값은 69
셀 <Cell '첫번째 시트'.B5> 의 값은 27
셀 <Cell '첫번째 시트'.C5> 의 값은 59
셀 <Cell '첫번째 시트'.D5> 의 값은 53
셀 <Cell '첫번째 시트'.E5> 의 값은 87
셀 <Cell '첫번째 시트'.B6> 의 값은 71
셀 <Cell '첫번째 시트'.C6> 의 값은 25
셀 <Cell '첫번째 시트'.D6> 의 값은 80
셀 <Cell '첫번째 시트'.E6> 의 값은 20
셀 <Cell '첫번째 시트'.B7> 의 값은 39
셀 <Cell '첫번째 시트'.C7> 의 값은 7
셀 <Cell '첫번째 시트'.D7> 의 값은 30
셀 <Cell '첫번째 시트'.E7> 의 값은 26
셀 <Cell '첫번째 시트'.B8> 의 값은 93
셀 <Cell '첫번째 시트'.C8> 의 값은 46
셀 <Cell '첫번째 시트'.D8> 의 값은 81
셀 <Cell '첫번째 시트'.E8> 의 값은 90
셀 <Cell '첫번째 시트'.B9> 의 값은 73
셀 <Cell '첫번째 시트'.C9> 의 값은 83
셀 <Cell '첫번째 시트'.D9> 의 값은 25
셀 <Cell '첫번째 시트'.E9> 의 값은 40
셀 <Cell '첫번째 시트'.B10> 의 값은 47
셀 <Cell '첫번째 시트'.C10> 의 값은 18
셀 <Cell '첫번째 시트'.D10> 의 값은 98
셀 <Cell '첫번째 시트'.E10> 의 값은 94

 

6. Worksheet.iter_cols()

# 지정한 범위의 열 반환

row_num = 5
col_num = 5
for col in ws.iter_cols(min_row=1, min_col=1, max_row=row_num, max_col=col_num):
    for cell in col:
        print(f"셀 {cell} 의 값은 {cell.value}") 

- 결과

#열을 기준으로 행을 읽어 나감

더보기

셀 <Cell '첫번째 시트'.A1> 의 값은 97
셀 <Cell '첫번째 시트'.A2> 의 값은 85
셀 <Cell '첫번째 시트'.A3> 의 값은 36
셀 <Cell '첫번째 시트'.A4> 의 값은 32
셀 <Cell '첫번째 시트'.A5> 의 값은 60
셀 <Cell '첫번째 시트'.B1> 의 값은 46
셀 <Cell '첫번째 시트'.B2> 의 값은 40
셀 <Cell '첫번째 시트'.B3> 의 값은 47
셀 <Cell '첫번째 시트'.B4> 의 값은 27
셀 <Cell '첫번째 시트'.B5> 의 값은 2
셀 <Cell '첫번째 시트'.C1> 의 값은 71
셀 <Cell '첫번째 시트'.C2> 의 값은 2
셀 <Cell '첫번째 시트'.C3> 의 값은 54
셀 <Cell '첫번째 시트'.C4> 의 값은 36
셀 <Cell '첫번째 시트'.C5> 의 값은 75
셀 <Cell '첫번째 시트'.D1> 의 값은 64
셀 <Cell '첫번째 시트'.D2> 의 값은 30
셀 <Cell '첫번째 시트'.D3> 의 값은 2
셀 <Cell '첫번째 시트'.D4> 의 값은 1
셀 <Cell '첫번째 시트'.D5> 의 값은 79
셀 <Cell '첫번째 시트'.E1> 의 값은 6
셀 <Cell '첫번째 시트'.E2> 의 값은 13
셀 <Cell '첫번째 시트'.E3> 의 값은 9
셀 <Cell '첫번째 시트'.E4> 의 값은 1
셀 <Cell '첫번째 시트'.E5> 의 값은 5

 

7. 파일의 모든 행과 열 출력, Worksheet.rows 속성

import random
for r in range(1,5):  
    for c in range(1,5):        
        ws.cell(row=r, column=c, value = random.randrange(1,100))   

print(list(ws.rows))	# 리스트형식으로 출력

- 결과

더보기

[(<Cell '첫번째 시트'.A1>, <Cell '첫번째 시트'.B1>, <Cell '첫번째 시트'.C1>, <Cell '첫번째 시트'.D1>), (<Cell '첫번째 시트'.A2>, <Cell '첫번째 시트'.B2>, <Cell '첫번
째 시트'.C2>, <Cell '첫번째 시트'.D2>), (<Cell '첫번째 시트'.A3>, <Cell '첫번째 시트'.B3>, <Cell '첫번째 시트'.C3>, <Cell '첫번째 시트'.D3>), (<Cell '첫번째 시트'.A4>, <Cell '첫번째 시트'.B4>, <Cell '첫번째 시트'.C4>, <Cell '첫번째 시트'.D4>)]

Worksheet.columns 속성

import random
for r in range(1,5):  
    for c in range(1,5):        
        ws.cell(row=r, column=c, value = random.randrange(1,100))   

print(list(ws.columns))    # 리스트형식으로 출력

- 결과

더보기

[(<Cell '첫번째 시트'.A1>, <Cell '첫번째 시트'.A2>, <Cell '첫번째 시트'.A3>, <Cell '첫번째 시트'.A4>), (<Cell '첫번째 시트'.B1>, <Cell '첫번째 시트'.B2>, <Cell '첫번
째 시트'.B3>, <Cell '첫번째 시트'.B4>), (<Cell '첫번째 시트'.C1>, <Cell '첫번째 시트'.C2>, <Cell '첫번째 시트'.C3>, <Cell '첫번째 시트'.C4>), (<Cell '첫번째 시트'.D1>, <Cell '첫번째 시트'.D2>, <Cell '첫번째 시트'.D3>, <Cell '첫번째 시트'.D4>)]

 

8. 값만 출력

for row in ws.values:
    for value in row:
        print(value)

- 결과

더보기

90
93
51
17
40
55
4
35
10
28
86
79
15
23
90
45

 

#참고 : https://openpyxl.readthedocs.io/

728x90
반응형

'프로그래밍 > Python' 카테고리의 다른 글

Python_openpyxl_엑셀_04_행과 열, 범위 이동  (0) 2021.02.02
Python_openpyxl_엑셀_03_데이터 응용  (0) 2021.02.01
Python_openpyxl_엑셀_01_시트 관련  (0) 2021.01.28
Python_05_for문  (0) 2021.01.25
Python_04_if문  (0) 2021.01.25

댓글