본문 바로가기
Python/자동화

[엑셀 자동화] 엑셀 데이터 접근 Practice

by rewyear 2024. 2. 17.

1. 출생년도에 따른 나이 

from datetime import datetime 
import openpyxl as excel

book = excel.Workbook()
sheet = book.worksheets[0]

# 올해 년도(2024년)
thisyear = datetime.now().year

# 헤더 설정 
sheet['A1'] = "출생년도"
sheet['B1'] = "나이"

# 현재 년도부터 100년 이전까지의 나이 계산 
for i in range(101):
    a_col = sheet.cell(i+2, 1) # 출생년도 열
    b_col = sheet.cell(i+2, 2) # 나이 열
    
    a_col.value = str(thisyear - i) + "년생"
    b_col.value = str(i+1) + "살"
    
book.save("age_list.xlsx")

출생년도에 따른 나이

 

2. +띠 추가

from datetime import datetime 
import openpyxl as excel

book = excel.Workbook()
sheet = book.worksheets[0]

# 올해 년도(2024년)
thisyear = datetime.now().year

# 헤더 설정 
sheet['A1'] = "출생년도"
sheet['B1'] = "나이"
sheet['C1'] = "띠"

# 띠 리스트(12지신)
jisin = ['쥐', '소', '호랑이', '토끼', '용', '뱀', '말', '양', '원숭이', '닭', '개', '돼지']

for i in range(101):
    a_col = sheet.cell(i+2, 1) # 출생년도 열
    b_col = sheet.cell(i+2, 2) # 나이 열
    c_col = sheet.cell(i+2, 3) # 띠 열
    
    a_col.value = str(thisyear - i) + "년생"
    b_col.value = str(i+1) + "살"
    c_col.value = jisin[(thisyear - i - 4) % 12] + "띠"
    
book.save("age_list.xlsx")

 

 

3. 판매 내역 데이터 읽기(범위 정해서 읽기)

월간 판매 내역 표

 

위와 같은 엑셀 서식 문서에서 반복적인 데이터인 (날짜, 이름, 품목, 수량, 가격, 총액)에 대하여 셀 데이터를 가져오는 코드는 다음과 같다.

import openpyxl as excel

'''
workbook 데이터를 읽어오면서 '수식 자체'를 가져오는 것이 아닌 계산된 값을 가져오기 위해서 
data_only를 True로 설정
'''
book = excel.load_workbook("monthly_sales.xlsx",data_only=True)
sheet = book.worksheets[0]

'''
해당 sheet에서 데이터 범위 확인하기
그러나 이 방법은 엑셀 시트에서 테두리가 설정되어 있다면 테두리 가장자리까지 인식함. 
'''
print(sheet.max_row, sheet.max_column)

'''
1. 따라서 적절하게 큰 범위의 셀 데이터를 읽어, 빈 칸(None을 통해 break 지점 확인)
'''
rows = sheet['A3':'F999']

for row in rows:
    line = [cell.value for cell in row] 
    if line[0] is None: break
    print(line)

print('\n')

'''
2. 또는 iter_rows 함수를 통해 모든 행의 셀 데이터를 불러올 수 있음 
'''
for row in sheet.iter_rows(min_row=3):
    line = [cell.value for cell in row]
    if line[0] is None: break
    print(line)

워크북을 불러올 때, 셀 안의 수식 자체를 불러오기 때문에 계산된 데이터를 불러오기 위해서는 load_workbook() 호출 시 data_only=True로 설정해 주어야 함.

 

데이터를 불러올 범위를 확인하기 위해서 직접 엑셀 시트를 확인하거나 sheet의 max_row, max_column을 확인해 볼 수 있지만 테두리 서식이 적용되어 있는 경우 가장자리까지 최대 범위로 인식하기 때문에 위 코드와 같이

  1. 임의로 적절히 넓은 범위의 셀 데이터를 불러와 빈 셀이 나올때까지 반목문을 실행하거나
  2. iter_rows에서 max_row를 지정하지 않음으로 모든 행의 셀 데이터를 불러와 빈 셀이 나올때까지 반목문을 실행

 

300x250