본문 바로가기
📌 Back End/└ Python

[Python] Xlwings - 파이썬으로 excel 파일 다루기

by 쫄리_ 2023. 4. 23.
728x90
반응형

python xlwings 라이브러리를 이용해서 엑셀에 데이터를 읽고 쓸 때 기본적인 세팅은 엑셀 창이 열리도록 되어있습니다. 하지만 종종 이 창을 띄우지 않고서 작업을 하고 싶은 마음이 들 때가 있습니다. 예를 들어 간단히 엑셀 파일에서 데이터만 읽어오면 되는 상황이 그렇습니다.

 

오늘은 엑셀 창 없이 xlwings 라이브러리를 이용해서 데이터를 판다스 데이터프레임 형태로 읽어오는 방법을 알아보겠습니다.

 

창 없이 xlwings를 사용하는 코드 패턴

xlwlings의 객체는 크게 다음과 같은 네 가지 유형이 있습니다. 객체의 계층 구조 순서대로 나열하면 App(엑셀 인스턴스), Book, Sheet, Range와 같습니다. 보통의 경우 xw.Book(파일명)를 바로 사용하여 엑셀 파일을 읽어왔지만, 창 없이 읽기 위해서는 App 객체부터 생성해야 합니다. 아래 코드를 보겠습니다.

 

# 라이브러리 불러오기
import xlwings as xw
import pandas as pd

# 엑셀 인스턴스 생성
app = xw.App(visible=False)
# 파일 상장법인목록
wb = xw.Book('파일명.xlsx')
# 첫번째 시트 읽어오기
sheet = wb.sheets[0]
# 데이터프레임 형태로 엑셀 시트 읽어오기
df = sheet.range('A1').options(pd.DataFrame, index=False, expand='table').value
# 인스턴스 종료
app.kill()

 

우선 필요한 라이브러리를 불러오고, 엑셀 인스턴스를 visible=False라는 옵션을 넣어 생성했습니다. 이후 엑셀 파일을 연결했습니다. 이후 과정은 xlwings를 사용하는 보통의 방법과 동일합니다.

 

 

xlwings

파이썬에는 xlwings, openpyxl, xlsxwriter 등 여러가지 파이썬 엑셀 라이브러리가 있습니다. 그중에 xlwings를 사용하여 파이썬으로 엑셀을 다루어 보겠습니다. xlwings를 사용하기 위해서는 엑셀이 설치되어있어야 합니다.

 

라이브러리 불러오기

xlwings 라이브러리를 불러옵니다. 앞으로 xw라는 축약어로 사용하겠습니다.

import xlwings as xw

 

통합 문서 연결하기

Book() 메서드를 사용하여 새 통합 문서를 생성하거나, 기존 통합문서를 연결할 수 있습니다. 기존 통합문서를 불러오기 위해서는 파일 경로를 매개변수로 입력해야 합니다.

# 새 통합문서 만들기
wb = xw.Book()
# 기존 통합문서 불러오기
wb = xw.Book("C:\\Users\\Desktop\\xlwings\\TestBook.xlsx")

 

xw.Book() 메서드를 사용하여 통합 문서를 새로 만들었습니다.

 

 

시트 연결하기

# 첫번째 시트를 sht1이라는 이름의 변수에 저장합니다.
sht1 = wb.sheets[0]

이제부터 첫 번째 시트를 sht1이라는 변수를 사용해서 이용할 수 있습니다. 

 

 

셀 연결하기

1) 한 개의 셀 다루기

sht1.range('A1').value = 'Hello World'
sht1.range('A1').value 
# >>> 'Hello World'

 

2) 복수의 셀 다루기

sht1.range('A3:D4').value = 11

 

3) 수식 입력하기

sht1.range('F3').formula = '=SUM(A3:D3)'

 

 

앞의 과정에서 입력한 코드들이 엑셀에 입력된 것을 볼 수 있습니다.

 

✔ 매우 간단한 코드들이지만 경우에 따라서는 강력한 업무 자동화 도구가 될 수 있습니다.
예를 들어 하나의 엑셀 서식에 팀 이름만 바꿔서 작성해야 하는 일이 있다고 생각해봅시다. 이 일을 엑셀로 해야 한다면 팀 개수만큼 엑셀 파일을 10번이고 20번이고 다른 이름으로 저장을 해야 합니다. 하지만 파이썬으로 한다면 반복문과 xlwings의 조합으로 순식간에 끝낼 수 있습니다.

 

 

4) 셀 값 지우기

sht1.range('A1:F4').clear()

값이 입력되어있던 모든 셀을 지웠습니다. 다시 빈 시트가 된 것을 확인할 수 있습니다.

 

 

출처 : https://hogni.tistory.com/58   /  https://hogni.tistory.com/17

 

728x90
반응형