광산김가네

[Python]파이썬으로 엑셀 데이터 다루기_openpyxl 라이브러리 본문

TIL(Today I Learn)

[Python]파이썬으로 엑셀 데이터 다루기_openpyxl 라이브러리

어둠의 그림자 2022. 7. 13. 20:10

파이썬으로 단순하게 open 함수로 엑셀파일을 열고 데이터를 다룰수도있겠지만

구글링을 해보니 엑셀 전용 라이브러리가 있었다!

 

해당 라이브러리로 엑셀 데이터를 정리해보았는데 

나중에도 써먹으려고 기록해보려 한다ㅎ-ㅎ

참고블로그

1. 엑셀 새로 생성하기

전체적인 틀은 다음과 같다

#필요한 import 구문
from openpyxl import Workbook

newWb = Workbook()
tmpWb = newWb.create_sheet('new Sheet')
tmpWb = newWb.active

tmpWb.append(넣어줄 정보)

여기서 넣어줄 정보는 행단위로 넣어줄수도 있고 열단위로 넣어줄수도있다

이게 진짜 대박이다 내 작업시간 지킴이 ;ㅁ;

자세한건 밑에서 실제 데이터로 넣어보겠다

2. 기존 엑셀 열기

#필요한 import 구문
from openpyxl import load_workbook

loadWb = load_workbook('열고 싶은 엑셀파일의 상대경로', data_only=True)
loadWb = load_wb['시트1']#시트이름
#데이터 불러오기1_행,열 단위로
for i in loadWb.rows:
	print(i)#행 단위로 출력

for i in loadWb.columns:
	print(i)#열 단위로 출력
    
#데이터 불러오기2_cell 단위로
loadWb[B2].value #B2 셀에있는 데이터를 가져온다
loadWb[B2:B6].value #이런식으로 리스트 인덱싱처럼 사용도 가능
loadWb.cell(i,j).value #i행 j열에 있는 셀의 데이터를 가져온다

3. 실제 활용

내가 하고싶은것은 /로 구분된 정보들을 엑셀파일로 정리하는것이다

ex) 이름/전화번호/비고 <- 이 string 데이터들을 엑셀파일에 표처럼 정리하기!

from openpyxl import load_workbook,Workbook


def removeSlash(str):
    ans = str.split('/')
    return ans
    

load_wb = load_workbook('string 엑셀시트.xlsx', data_only=True)
load_ws = load_wb['시트1']
write_wb = Workbook()
write_ws = write_wb.create_sheet('새로운 시트')
write_ws = write_wb.active
i_list = [1,3,5,7]#정보가 있는 열

for i in range(2,15):#정보가 있는 행
    for j in i_list:
        people = load_ws.cell(i,j).value
        if people:
            people = removeSlash(people)
            write_ws.append(people)
            
write_wb.save("정리된 string.xlsx")

 

+ 오류목록

PermissionError: [Errno 13] Permission denied: '엑셀파일이름.xlsx'

오류원인) 엑셀파일이 열려있어서 접근이 안되어있던것!

엑셀파일을 닫아주면 가능하다~.~

FileNotFoundError: [Errno 2] No such file or directory: '엑셀파일이름.xlsx'

오류원인) 파일위치를 못찾았다 ; 상대경로 혹은 절대경로 입력방식이 잘못됐다!

vscode의 경우 경로를 복사할수있으므로 이 기능을 적극 활용하자