최신화 : 2021.06.30
파이썬을 이용해 엑셀로 로그를 만들어야 하는 일이 생겼다.
pandas를 이용해 데이터를 전부 저장한 후 엑셀에 써 줄지, 아니면 나타나는 로그들을 바로바로 엑셀에 한 줄씩 넣어줄지 생각하다가 데이터 양이 너무 많아질 수 있어서 데이터를 저장하지 않고 바로 엑셀에 기록하기로 마음먹었다.
그래서 openpyxl 모듈을 사용해 기록해보아야겠다고 생각했다.
물론! openpyxl에서도 pandas나 numpy 등을 이용해 기록할 수 있다.
나는 그렇게 할 필요가 없기 때문에 그냥 내가 사용할 사용법들을 기록하겠다.
참고 : https://openpyxl.readthedocs.io/en/stable/pandas.html
import openpyxl
dir = 'C:\\Users\\1984\\Desktop\\openpyxl_Example.xlsx'
excel = openpyxl.Workbook()
excel_ws = excel.active # 현재 활성화된 시트 선택
# (방금 만들었으니 시트가 1개밖에 없음 -> 자동으로 1개 활성화)
excel_ws.title = 'Pizza' # 활성화된 시트 이름을 Pizza로 바꿔주었다.
excel.save(dir) # 절대 경로로 하지 않으면 현재 디렉토리에 그냥 파일이 생긴다.
이 때 유의할 점이 있다.
openpyxl을 이용해 시트를 생성하고 저장한다면 파일이 덮여씌워진다는 점이다.
create_sheet()
import openpyxl
dir = 'C:\\Users\\1984\\Desktop\\openpyxl_Example.xlsx'
# 경로에 있는 excel파일을 불러온다.
excel = openpyxl.load_workbook(dir)
# create_sheet() 메소드로 새로운 시트를 생성한다.
excel.create_sheet('chocolate')
excel.create_sheet('bread')
excel.save(dir)
유의사항 (시트를 선택할 때)
excelFile.get_sheet_by_name('시트명') 은 사용했을 때 오류가 발생했다.
excelFile['시트명'] 을 추천한다.
import openpyxl
dir = 'C:\\Users\\1984\\Desktop\\openpyxl_Example.xlsx'
excel = openpyxl.load_workbook(dir)
# bread 시트를 선택
excel_ws = excel['bread']
# A1 셀을 직접 지정해 입력
excel_ws['A1'] = 'HONEY'
# 셀을 행과 열로 지정해 입력
excel_ws.cell(row = 2, column = 1).value = 'Cheese'
# 입력되어있는 바로 밑 행의 처음부터 입력된다.
excel_ws.append(['I', 'like', 'bread'])
excel.save(dir)
import openpyxl
dir = 'C:\\Users\\1984\\Desktop\\openpyxl_Example.xlsx'
excel = openpyxl.load_workbook(dir)
excel_ws = excel['bread']
# 기존에 존재하던 행 앞에 공간 삽입
excel_ws.insert_rows(1)
# 기존에 존재하던 열 앞에 공간 삽입
excel_ws.insert_cols(8)
# 1 부터 3 까지의 행 삭제
excel_ws.delete_rows(1, 3)
# A : C 까지의 열 삭제
excel_ws.delete_cols(1, 3)
# 범위를 지정해 행과 열 움직이기
excel_ws.move_range("D4:F10", rows=-1, cols=2)
excel.save(dir)
import openpyxl
dir = 'C:\\Users\\1984\\Desktop\\openpyxl_Example.xlsx'
excel = openpyxl.load_workbook(dir)
excel_ws = excel['bread']
# bread 시트의 A1 셀 객체에 접근했다.
A1 = excel_ws['A1']
# 행의 값을 숫자로
print(A1.row)
# 열의 값을 숫자로 (A = 1)
print(A1.column)
# A1에 들어있는 값
print(A1.value)
# A1이 어느 위치에 있는지
print(A1.coordinate)
# 이렇게 여러 범위로도 접근할 수 있다.
range_excel = excel_ws['A1' : 'C3']