파이썬 엑셀 다루기 파이썬 업무 매크로 하는 코딩 법

2022. 8. 25. 19:48빅데이터 파이썬 기반

728x90

 

안녕하세요 한때 유명했던 카이스트 생이 업무 자동화 스크립트를 파이썬으로

짜서 2년간 일할 것을 단 1주일 만에 해결했다는 유명한 일화 있죠?

 

오늘은 그 업무 자동화하는 스크립트에 기본 엑셀을 다루는 방법에 대해서 이야기해 보려고 합니다 사실 제가 말하는 엑셀 다루기 스크립트를 사용하려면

" 규칙적으로 업무를 해야 함, 단 단순히 규칙적으로 한다는 것 말고 그 업무를 공식 화할 수 있어야 함"

 

컴퓨터는 변수나 오류에 대해서 민감해 컴퓨터가 끊기거나 멈추는데요 오늘은

파이썬을 사용해서 단순히 나의 업무를 공식화할 수 있다면 사용할 수 있는데

파이썬으로 엑셀을 다루는 법에 대해서 알아보려고 합니다

 

아주 간단한데요 일단 오늘도 어김없이 파이썬으로 엑셀을 다루기 위한 파이썬의

라이브러리가 있어야 하는데요 cmd 나 콘솔에 아주 간단한 게 밑에처럼 적습니다

 

pip install openpyxl  적어줌으로써 파이썬의 라이브러리를 다운로드하면 이제

파이썬으로 엑셀을 다루기 위한 준비는 끝난 것입니다 이제 시작하겠습니다

 

1. python으로 엑셀을 다루기 위한 라이브러리 import

from openpyxl import Workbook

wb = Workbook() # 들어가 새워 그 북 생성 (하나의 엑셀파일)

ws = wb.active # 현재 활성화된 sheet 가져옴 (즉 새로운 워크북 하나 생성)

위에 있는 것을 복사해서 라이브러리를 import 합니다 workbook는 소문자도 있고

대문자도 있으니 조심해 주세요 무조건 W 가다 문자여야 합니다

간단히 설명하자면 Workbook() class인데요 간단히 파이썬에 엑셀을 다루기 위한

객체를 반환합니다 그리고 그 반환된 객체를 변수로 받은 후 wb.active로 엑셀 시트를

하나 활성화시켜준다고 생각하시면 됩니다

 

2. python 엑셀 시트 (sheet) 이름 정한 후 저장하기

ws.title = 'KimHeeBeom'

wb.save('저장할 엑셀 시트 이름. xlsx')

wb.close()

활성화시켜준 엑셀 파일에 title이라는 변수에 이름을 넣어주면 시트에는 내가 지정해 준

이름이 들어가게 되는데요 앞서 설명한 1번과 2번은 기본으로 해줘야 하는 틀에 가까우니

그냥 해야 하는구나 변수와 함수의 이름과 똑같이 기능을 하기 때문에 외워야 하는 틀입니다.

 

3 python 엑셀 파일 sell 다루기 와 중간에 저장하기

 

wb = Workbook()

ws = wb.create_chartsheet()

ws.title = 'MySheet'

#만약 중간에 페이지를 넣고 싶을 때는

# 0번부터 1 번 다음 3번 전에 Sheet를 하나 끼워 만들겠다는 것

w0 = wb.create_sheet('gitSheet',2)

# 밑에처럼 아귀 먼트로 바로 제목을 줄 수 있음

w1 = wb.create_chartsheet('YoutSheet')

# 위에처럼 워크북에 시트를 여러 개 만들 수 있다 하지만

# 워크북에 ['이름으로 시트 접근 가능'] 딕셔너리 형태

wb['gitSheet'].title = 'changeSheet'

# 모든 시트에 이름을 list 형태로 가져올 수 있음

print(wb.sheetnames)

wb.save('sample.xlsx')

이번에는 조금 다르게 wbcreate_chartsheet('엑셀 시트 이름')라고 지어줬는데요

방금 활성화돼있던 sheet에 하나를 더 만들어준다는 뜻입니다 간단하게 이 정도면

엑셀 시트는 마스터하셨습니다

 

 

wb = Workbook()

ws = wb.active

ws.title = 'TestSheet'

# sell 정보 저장하는 방법

ws['A1'] = 1

ws['A2'] = 1

ws['A3'] = 1

ws['A4'] = 1

ws['B1'] = 1

ws['B2'] = 1

ws['B3'] = 1

ws['B4'] = 1

# sell 데이터 가져오는 방법

print(ws['A1'].value)

# 값이 없을 때는 None를 출력하는 것을 알 수 있음

print(ws['A10'].value)

# 이 말을 A1 sell 과 똑같음

# row = 1,2,3 ...

# cloumn 은 A, B, C ...

print(ws.cell(row =1 , column= 1).value)

#위에 와 다르게 값을 줄 수도 있음

# 이렇게 하면 A1 번 sell 의 값을 10 을 준 것

ws.cell(row=1 ,column=1, value=10)

ws.cell(column=1 ,row=1 ,value=10)

import random

abcd =1

for x in range(1,11):

for y in range(1,11):

ws.cell(row= x, column= y, value=abcd)

abcd +=1

wb.save('sample.xlsx')

wb.close()

엑셀 시트에는 행과 열이 있습니다 A ~ Z까지 1~ ...까지 여러 행과 열둘이 있습니다

만들어준 엑셀 시트에 활성화된 엑셀 시트에 행과 열어 이름을 적어주면 거기에 내가 저장하고 싶은 이름들이 저장됩니다 SELL을 다 루르는 것 까지는 여기인데요

 

아주 간단하죠 이제 파일을 불러오는 법과 한 번에 데이터를 저장하는 법을 알아보고 마치겠습니다

 

4. Python 엑셀 가져오는 법과 여러 행 저장법

from openpyxl import load_workbook

# 파일 불러오기 역할을 해준 데

wb = load_workbook('sample.xlsx')

ws = wb.active

#만약 cell의 개수를 알고 있을 때

for x in range(1,11):

for y in range(1,11):

print(ws.cell(row= x, column= y).value, end = ' ')

print()

print()

# 만약 cell의 개수를 모르고 있을 때

for x in range(1, ws.max_row + 1):

for y in range(1, ws.max_column+1):

print(ws.cell(row= x, column= y).value, end = ' ')

print()

이번에는 엑셀 파일을 불러오기 위해 다른 패키지를 import 해줘야 하는데요

openpyxl에서 load_workbook 을 import 합니다 그리고 위에 생성자에 내가 가져오고 싶은 엑셀파일의 이름을 넣고 ws.cell 가져 오 싶은 행과 번호를 넣어서 가져옵니다

 

이제 끝입니다 정말 끝이에요?라고 할 수 있는데 네 진짜 끝입니다 이 정도만 알고 있어도 엑셀을 충분히 파이썬을 다룰 수 있고 써야 하는데 잘 모르는 기술이 있다면

 

 

https://openpyxl.readthedocs.io/en/stable/

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.10 documentation

openpyxl stable Tutorial Simple usage Performance Optimised Modes Inserting and deleting rows and columns, moving ranges of cells Working with Pandas and NumPy Charts Comments Working with styles Additional Worksheet Properties Conditional Formatting Pivot Tables Print Settings Using filters and sor...

openpyxl.readthedocs.io

여기에 들어가셔서 ctrl+f를 누른 후 파파고를 킨 후에 내가 하고 싶은 키워드 하나만 넣어주면 알아서 찾아주고 그리고 저 기능 말고 다른 기능은 아주 가끔씩 사용합니다

 

 

이제 짝짝짝 당신도 카이스트 생과 같은 급이 되었습니다 그렇게 코딩을 모르면 어려울 것 같은 그런 것들이 막상 한번 쓱 훑어보니까 나도 할 수 있을 것 같다는 생각이 드실 겁니다 맞습니다 당신도 할 수 있습니다 진짜 쉬운걸요?

 

도움이 되셨다면 공감 한번 꾺! 눌러주세요 감사합니다

 

728x90