xlwings는 빠른시작 명령을 제공하고 있습니다. 엑셀과 파이썬을 연결하기 위해서는 엑셀 개발자도구에서 파이썬을 호출할 수 있도록 코드를 작성해야 합니다. 이 과정은 간단하지만 번거로울 수 있어서, xlwings에서는 이를 자동화하는 빠른시작 기능을 제공합니다. 함께 살펴보도록 하겠습니다!
vscode에서 quickstart
xlwings는 quickstart 기능을 제공합니다. 터미널이나 VSCode를 실행하여 'xlwings quickstart 파일명' 명령을 입력하면 즉시 Python 파일이 연결된 Excel 파일이 생성됩니다.
작업을 시작하기 전에, 먼저 새로운 폴더를 만들어 테스트 파일을 생성해보겠습니다. Windows 탐색기에서 원하는 위치에 폴더를 생성하고 아래 과정을 따라하시면 됩니다. cd 명령어는 터미널에서 다른 경로로 이동할 때 사용됩니다. 터미널은 폴더 구조를 시각적으로 보여주지 않기 때문에, 저는 VSCode를 주로 사용합니다.
해당폴더로 이동 했다면 quickstart명령을 실행합니다. 명령을 실행하면 실행명령 파일명으로 폴더가 생기고 xlsm확장자를 가진 파일과 동일명칭의 py파일이 생성된것을 확인 할 수 있습니다.
샘플 실행해보기
여기까지 완료 하셨다면, 이제 py파일에 코드를 입력해서 사용 할 수있습니다. 그전에 샘플코드로 어떻게 연결되는지 맛을 보아야겠죠?? 상단의 "xlwings"탭을 클릭하고 Run main을 클릭합니다.
한번클릭
두번째 클릭
사용자정의함수는?
xlwings는 Excel에서 직접 사용할 수 있는 사용자정의함수(UDF)를 제공합니다. UDF를 사용하면 Python으로 작성한 함수를 Excel 수식처럼 사용할 수 있습니다.
예를 들어, @xw.func 데코레이터를 사용하여 함수를 정의하면, Excel의 수식 입력창에서 해당 함수를 바로 호출할 수 있습니다. 이는 복잡한 계산이나 데이터 처리가 필요한 경우 매우 유용합니다.
또한, xlwings의 UDF는 동적으로 업데이트되어 실시간으로 결과를 반영할 수 있으며, Python의 강력한 라이브러리들을 Excel에서 직접 활용할 수 있게 해줍니다.
어떤구조일까?
py파일 확인
그럼 대체 코드가 어떻게 구성되어 있을까요?? py파일을 살펴보겠습니다. main()함수가 보이고 아래에 hello(name)함수가 보입니다. main()함수는 리본메뉴에서 Run main버튼을 클릭하면 실행되는 함수이며, hello()함수는 UDF 임포트해서 사용한 기능입니다. py파일에서 UDF로 사용하려면 "@xw.func"라고 명시해두면 엑셀에서 임포트해서 사용 할 수 있습니다. 참고로 UDF는 user defined functions라는 의미로 한국말로 사용자정의 함수?? 라고 이해하면 되겠습니다.
vba확인
한 가지를 더 살펴보겠습니다! 지금까지는 Excel이 Python 코드를 직접 읽어오는 것처럼 보일 수 있습니다. 하지만 실제로는 그렇지 않습니다. Excel은 기본적으로 VB라는 프로그래밍 언어를 내장하고 있습니다. 따라서 Excel에서 외부 프로그램과 통신하려면 반드시 VBA를 거쳐야 합니다. Excel 창에서 "Alt+F11" 단축키를 누르면 아래와 같은 VBA 편집기가 열립니다.
자세히 살펴보겠습니다. VBA 코드가 보이는데, 처음에는 생소해 보일 수 있습니다. 하지만 자세히 보면 몇 가지 친숙한 요소들이 있습니다. "RunPython"이라는 명령어는 말 그대로 Python을 실행한다는 의미입니다. 코드에는 import 구문과 함께 .main() 함수 호출이 포함되어 있습니다. 이는 우리가 Python 파일에서 봤던 그 main() 함수를 실행하라는 지시입니다.
이러한 구조를 이해하면, 우리는 다른 함수들도 같은 방식으로 구현할 수 있습니다. 동일한 형식을 따라 함수명만 변경하면 새로운 기능을 쉽게 추가할 수 있을 것 같습니다.
위의 구문이 이해가 안가서 VBA를 배워볼까?? 라는 생각을 하셨다면, 시간적여유가 있을경우 도전해보시고 ^^ 그렇지 않다면 그냥 이정도에서 멈추시는 것을 추천 드립니다. 파이썬을 어느정도 익히셨다면 VBA가 특별히 어렵게 느껴지지는 않겠지만 제가 보았을땐 시간 낭비 입니다. 엑셀에 굳이 파이썬을 연결했는데 효율적인 파이썬을 두고 VBA를 배울 필요가 없다는것을 강조하고 싶습니다. 사실 제가 VBA를 따로 찾아보고 삽질도 해봤기때문에 말씀드리는 겁니다. (VBA가 좋지 않다는 것이 아닙니다. 파이썬을 연결했으니, 훨씬 풍부한 라이브러리를 충분히 활용 하자는 의미입니다.)