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을 확인해 볼 수 있지만 테두리 서식이 적용되어 있는 경우 가장자리까지 최대 범위로 인식하기 때문에 위 코드와 같이
- 임의로 적절히 넓은 범위의 셀 데이터를 불러와 빈 셀이 나올때까지 반목문을 실행하거나
- iter_rows에서 max_row를 지정하지 않음으로 모든 행의 셀 데이터를 불러와 빈 셀이 나올때까지 반목문을 실행
300x250
'Python > 자동화' 카테고리의 다른 글
[엑셀 자동화] 엑셀의 기본구조와 데이터 접근 (0) | 2024.02.17 |
---|---|
0. 환경 구성 및 python 기본 문법 (0) | 2024.02.17 |
파이썬 업무 자동화 관련 study (2) | 2024.02.17 |