2. 해외선물/2-6. 기타자료 (파이썬 함수 등)

(파이썬) 엑셀 내용을 파이썬에서 출력하기 (3) openpyxl 을 통해 엑셀의 데이터값 가져오기 (R1C1 셀주소)

봄이오네 2023. 11. 15. 08:02
반응형

 

목 차
1. 들어가며
2. 사전설명
3. R1C1의 형태가 필요한 이유?
4. 마치며

 

 

1. 들어가며

지난 글에서는 openpyxl을 통해 엑셀 데이터값을 가져오는 방법을 알아보았다. 셀 주소 뒤에 value를 붙이면 된다.

 

이번 글에서는 엑셀 데이터 받아오는 또다른 방법인 엑셀의 R1C1 셀주소 형태를 이용하여 데이터 받아오는 방법을 알아보자.

 


2. 사전설명

아래 엑셀 파일은 < 그림1 >의 데이터가 들어있는 파일이다.

 

excel_test.xlsx
0.01MB

 

앞글에서는 아래 코드와 같이 엑셀의 데이터를 가져와 보았다. 셀 주소 뒤에 value를 붙이면 된다.

import openpyxl

dir = r'C:\Users\User\Desktop\excel_test.xlsx'  # 경로 설정

wb = openpyxl.load_workbook(dir)    # 엑셀파일 열기
ws = wb.active                      # 현재 활성화된 시트 얻기 (마지막 저장된 시트)

# print(ws)

aa1 = ws['E6'].value

print(aa1)


### (expected result)
### 15185.75

 

 

자, 또다른 방법은 무엇이 있을까? 셀을 나타낼 때는 E6처럼 나타내는 방법(A1 셀주소)이 있고, E6셀을 R1C1의 방법으로 (5,6)으로 나타낼 수 있다. < 그림1 >에서 확인가능한데, R1C1은 A를 1로 표기하고, E를 5로 표기한다. 그래서 사용자에게 익숙한 E6셀을 R1C1 형태로 나타내면 (5,6)이 되는 것이다.

 

그림1. 엑셀의 열을 R1C1형태로 나타내면 숫자가 부여된다.

 

 

또다른 형태로 엑셀의 데이터를 가져오면 아래 코드와 같다. 형태에는 약간의 차이가 있다.

  • A1     형태 : 10줄에서 aa1 = ws.     ['E6'].value
  • R1C1 형태 : 15줄에서 aa2 = ws.cell(5,6).value

어떤 차이가 눈에 보이는지? 셀 주소를 A1형태로 나타내면 활성화된 시트을 뜻하는 ws에 대괄호 안에 셀주소를 쓰면 된다. 이에 비해, R1C1 형태는 활성화된 시트에 cell을 쓰고 소괄호 안에 R1C1의 주소를 써준다.

 

import openpyxl

dir = r'C:\Users\User\Desktop\excel_test.xlsx'  # 경로 설정

wb = openpyxl.load_workbook(dir)    # 엑셀파일 열기
ws = wb.active                      # 현재 활성화된 시트 얻기 (마지막 저장된 시트)

# print(ws)

aa1 = ws['E6'].value

print(aa1)
print("##################################")

aa2 = ws.cell(5,6).value

print(aa2)


### (expected result)
### 15185.75
##################################
### 15185.75

코드1. E6셀을 A1 셀주소 및 R1C1 셀주소로 표기하여 출력을 하여도 결과는 동일하다.

 


3. R1C1의 형태가 필요한 이유?

엑셀을 자주하는 사용자일수록 A1 셀주소가 익숙할 것이다. R1C1 형태는 어색할 뿐만 아니라, 어떤게 행이고 렬인지 헷갈릴 수 있다. 그래도 필요한 이유가 있다면? 코딩을 하는 입장에서는 반복적인 작업은 for문을 통해 해결하는 것으로 답변을 할 수 있을 것이다.

import openpyxl

dir = r'C:\Users\User\Desktop\excel_test.xlsx'  # 경로 설정

wb = openpyxl.load_workbook(dir)    # 엑셀파일 열기
ws = wb.active                      # 현재 활성화된 시트 얻기 (마지막 저장된 시트)

########## 엑셀의 E열 개수 구하기 ###################
line_row = ws['E']          # 엑셀에서 받은 최초의 데이터는 "튜플"형이다.
line_row = list(line_row)   # 리스트 형으로 변경 (리스트 내 항목 숫자를 세어보기 위함)

###########################################################################################
for i in range(1, len(line_row)):    # 1~4 (5)
    aaa = ws.cell(i, 5).value
    print(aaa)
    
    
### (expected result) ###
### None
### None
### None
### 시가
### 15185
### 15185.75
### 15186.5
### 15186.5
### 15186.25
### 15186.5
### 15186.5
### 15186.5
### 15186
### 15187

코드2. R1C1 형태를 이용하여 파이썬에서 엑셀의 데이터를 출력한다.

 


4. 마치며

엑셀의 R1C1 형태를 통해 엑셀 데이터 받는 방법을 알아보았다. R1C1 형태가 굳이 필요한지에 대해서는 사용자마다 생각이 다르긴 하다. 익숙하지 않은 엑셀의 셀주소 형태를 '굳이' 활용해야 하는지? 이런 의문이 들 수도 있다. 필자가 말하고 싶은 부분은 나중에 동적으로 데이터가 제공될 때, 분명 R1C1의 형태는 유용할 것으로 생각된다. 이 부분(동적 데이터 제공)에 대해서는 나중에 천천히 이야기해 보도록 하자.

 

< 코드2 >에서 < 그림1 >의 빈칸(E1 ~ E3)는 None로 출력된다. 다음글에서는 빈칸을 없애는 방법을 알아보자.

 

 

반응형