파이썬의 xlwings 모듈을 사용하면 엑셀 VBA와 결합하여 엑셀 프로그래밍에 사용할 수 있다. 예를들면, 엑셀 VBA를 몰라도 파이썬에서 엑셀 커스텀함수를 작성해서 VBA에서 불러와 사용하는 것이다. 이번 포스팅에서는 xlwings 모듈을 사용하여 엑셀 VBA에서 파이썬 함수를 불러오는 기본 사용법을 정리해보려 한다.
반대로 파이썬에서 엑셀 VBA 코드를 동작시키는 방법은 아래 포스팅에서 정리하였으니 참고!!
(참고링크 : 2021.06.06 - [코딩/Python] - [Python/파이썬] 파이썬에서 엑셀 VBA 동작시키기 - xlwings 모듈)
1. xlwings 모듈 설치
-. 글쓴이의 개발환경 : Window10, VS Code 사용(conda-base)
-. xlwings는 내장모듈이 아니기에 따로 설치를 해주어야 한다. 어떤 모듈이 그렇듯 개발 환경 터미널 창에 아래 명령어를 치면 자동으로 설치된다.
- VS- Code에서 인터프리터를 Anaconda를 사용하고 있기다면 두번째 방법을 사용(conda install -)
<설치 명령어>
#python
pip install xlwings
#Anaconda
conda install xlwings
-. xlwings 모듈을 설치 후 아래 명령어를 통해 엑셀 addin을 설치한다.
xlwings addin install
-. 위 addin을 설치하고 엑셀을 실행해보면 우측에 xlwings가 새로 생긴 것을 확인 가능.
2. 엑셀 VBA에서 xlwings 사용법
1) 엑셀 .xlsm 확장자 파일 저장
엑셀 VBA를 사용해본 사람이라면 알겠지만 VBA를 사용하기 위해선 .xlsm 이라는 확장자로 파일을 저장해줘야 한다. 엑셀 파일을 '다른 이름 저장' 매뉴를 통해 .xlsm 확장자를 가진 파일로 저장한다.
2) VBA 개발 창 실행해보기 (단축키 : Alt + F11)
엑셀의 VBA 코딩기능을 활용하기 위해선 Visual Basic 개발 매뉴를 사용해야 한다. 방법은 2가지인데 단축키 Alt+F11을 누르거나 아래 그림처럼 개발 도구 - Visual Basic을 클릭하면 된다.
개발 도구 매뉴가 없다면 파일-옵션-리븐사용자 지정 매뉴에서 '개발도구' 매뉴를 활성화시켜줘야 한다. 이 부분은 다른 블로거 분이 잘 정리해주신 자료가 있어 하단에 참고링크로 첨부한다.
3) VBA Project에 xlwings 모듈 참조하기
파이썬의 xlwings 모듈을 사용하기 위해선 VBA에서 xlwings 모듈을 참조할 수 있도록 설정해야 한다. 2)의 VBA 개발 창에서 도구-참조 매뉴를 선택하면 아래 창이 나온다. 아래 창에서 xlwings를 체크해준다.
정상적으로 xlwings를 추가하였다면 아래와 같이 xlwings (xlwings.xlam) 이 추가된다.
4) 파이썬 test 코드 작성해보기
p1.py라는 파이썬 파일에 아래 test 코드를 작성해보았고 VBA를 통해 실행시켜볼 것이다. 코드는 참고링크에 있는 글을 보고 비슷하게 작성해보았다.
<파이썬 코드>
import xlwings
def main():
wb = xlwings.Book.caller()
sheet = wb.sheets[0]
sheet["A1"].value = "xlwings 모듈 test"
sheet["A2"].value = "투손플레이스"
if __name__ == "__main__":
xlwings.Book("py1.xlsm").set_mock_caller()
main()
5) VBA 를 통해 파이썬 코드 호출하기
VBA코드를 작성하기 위해서 아래 Project에서 모듈을 생성한다.(프로젝트 오른쪽 클릭하여 삽입-모듈) 그 다음, 아래 코드를 작성해본다.
<VBA 코드>
Sub test()
RunPython "import py1;"
RunPython "py1.main()"
End Sub
아직 기초만 다뤄서 정확히 모르지만 VBA에서 xlwings 모듈을 통해 파이썬 코드를 호출하려면 RunPython이라는 함수를 사용하면 되는 것 같다. 오른쪽은 string으로 py1.py파일을 import하고 py1의 main함수를 실행시키는 코드이다.
(py1.py파일은 엑셀 파일과 같은 경로에 있어야 함.)
위 코드를 작성 후, 엑셀파일 - xlwings 모듈에서 Run main을 클릭해보자. 결과를 아래와 같이 확인할 수 있다.
<결과>
다음 편에서는 xlwings 모듈 내부 함수에 대한 내용을 좀더 자세하게 정리해 볼 예정이다.
참고자료 : https://streamls.tistory.com/262
'코딩 > Python' 카테고리의 다른 글
[Python/파이썬] 자료형 - Dictionary 1편 : 기초 (0) | 2021.06.13 |
---|---|
[Python/파이썬] 파이썬에서 엑셀 VBA 실행시키기 - xlwings 모듈 (1) | 2021.06.06 |
[Python/파이썬] 특정 시간에 파이썬 코드 동작시키기 - schedule 모듈 (0) | 2021.05.16 |
[Python/파이썬] Pandas Dataframe 결합 : Merge (0) | 2021.04.25 |
[Python/파이썬] Pandas Dataframe 결합 : Concat (0) | 2021.04.24 |