PyXLL은 Microsoft Excel과 Python 사이의 격차를 해소하는 도구로, Python 코드와 기능을 Excel 스프레드시트에 원활하게 통합할 수 있게 해 줍니다. PyXLL은 Excel 추가 기능으로 사용되며, Excel의 VBA 환경에서 Python 함수와 매크로를 직접 작성할 수 있습니다.
이 글은 초보 또는 입문자를 위한 내용은 아닙니다. 파이썬과 엑셀 함수에 대한 어느 정도의 지식이 필요하며, pip에 대해서도 알아야 합니다. 향후 Python in Excel 기능이 본격 도입될 경우를 대비하여 '이런 것이 있군' 정도로 봐 두시는 것도 좋은 생각입니다.
※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 제 개인 의견이나 추가 자료들이 다수 포함되어 있습니다. 원문 내용이 궁금하신 분은 URL을 살펴보세요.
- 원문: How to Seamlessly Integrate Python Into Excel Using PyXLL
- URL: https://www.makeuseof.com/pyxll-python-excell-seamlessly-integrate/
PyXLL 개요
PyXLL은 Excel에서 Python 인터프리터를 실행하여 작동합니다. PyXLL에서 실행되는 Python 코드가 Excel 데이터 및 개체에 직접 액세스 할 수 있습니다. PyXLL은 C++로 작성되었으며 Excel과 동일한 기본 기술을 사용합니다. 이는 PyXLL에서 실행되는 Python 코드가 일반적으로 Excel VBA 코드보다 훨씬 빠르다는 것을 의미합니다.
PyXLL 설치
PyXLL을 설치하려면 PyXLL 웹사이트로 이동하여 추가 기능을 다운로드합니다. 선택한 Python 버전과 Excel 버전이 시스템에 설치된 버전과 일치하는지 확인하고 몇 가지 기본 정보를 입력합니다. PyXLL은 Windows 버전의 Excel에서만 사용할 수 있습니다.
다운로드가 완료되면 VS Code 같은 저작 도구를 열고 터미널 창에 다음 명령을 실행합니다.
pip install pyxll
위 명령을 실행하려면 시스템에 Pip가 설치되어 있어야 합니다. 그런 다음 PyXLL 패키지를 사용하여 PyXLL 추가 기능을 설치합니다. 이때 Excel은 종료하고 진행합니다.
pyxll install
설치 프로그램에서 추가 기능을 다운로드했는지 묻습니다. [y]를 입력한 다음, 추가 기능이 포함된 zip 파일의 경로를 알려줍니다. 화면의 지시에 따라 설치를 완료합니다.
PyXLL 시작하기
플러그인을 설치한 후 Excel을 실행합니다. 평가판으로 시작할 지지금 구매할지를 묻는 대화상자가 나타납니다. 평가판은 30일 후에 만료되며 PyXLL을 계속 사용하려면 라이선스를 구입해야 합니다( 인당 월 $25/연간 계약 기준).
[Start Trial] 버튼을 클릭하면 Excel이 시작됩니다. [PyXLL Example Tab]에서 [About PyXLL] 버튼을 클릭합니다. 구성 및 로그 파일의 경로와 함께 추가 기능을 설치한 경로가 표시됩니다. 이 경로는 나중에 해당 파일을 편집할 때 필요하므로 기록해 두시기 바랍니다.
Python 함수를 Excel에서 사용
Python 함수를 사용자 정의 함수(UDF)로 Excel에서 사용하려면 @xl_func 데코레이터(decorator)를 사용합니다. 이 데코레이터는 PyXLL에 함수를 Excel에 등록하여 사용자가 사용할 수 있도록 지시합니다. 예를 들어 Python fibonacci() 함수를 Excel에 UDF로 노출하려면 다음과 같이 @xl_func 데코레이터를 사용할 수 있습니다.
from pyxll import xl_func
@xl_func
def fibonacci(n):
"""
This is a Python function that calculates the Fibonacci sequence.
"""
if n < 0:
raise ValueError("n must be non-negative")
elif n == 0 or n == 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
이 코드를 .py 확장자로 저장하고 파일을 저장하는 폴더의 경로를 기록해 두세요. 이제 편집기에서 PyXLL 구성 파일을 열고 "pythonpath"로 시작하는 줄까지 아래로 스크롤합니다. 이 설정은 일반적으로 PyXLL이 Python 모듈을 검색할 폴더 목록입니다. Fibonacci 함수 소스 코드가 포함된 폴더에 경로를 추가합니다.
그런 다음 "모듈"까지 아래로 스크롤하여 모듈을 추가하세요. 예를 들어 파일을 fibonacci.py로 저장한 경우 목록에 "fibonacci"라는 이름을 추가합니다.
@xl_func 데코레이터를 사용하는 모듈 함수가 Excel에 노출됩니다. Excel로 돌아가서 [PyXLL Example Tab]에서 PyXLL 다시 로드 버튼을 클릭하여 구성 파일의 변경 사항을 동기화합니다. 이제 다른 Excel 수식과 마찬가지로 Python fibonacci 함수를 호출할 수 있습니다.
Excel과 Python 간 데이터 전달
PyXLL은 Pandas와 같은 외부 Python 라이브러리 사용을 지원합니다. 이를 통해 라이브러리의 데이터를 Python으로 또는 그 반대로 전달할 수 있습니다. 예를 들어 Pandas를 사용하여 임의의 데이터 프레임을 생성하고 이를 Excel에 전달할 수 있습니다. Pandas가 시스템에 설치되어 있는지 확인한 후 다음 코드를 사용해 보세요.
from pyxll import xl_func
import pandas as pd
import numpy as np
@xl_func("int rows, int columns: dataframe<index=True>", auto_resize=True)
def random_dataframe(rows, columns):
data = np.random.rand(rows, columns)
column_names = [chr(ord('A') + x) for x in range(columns)]
return pd.DataFrame(data, columns=column_names)
이 모듈과 해당 기능을 Excel에 노출하려면 동일한 프로세스를 따라야 합니다. 그런 다음 다른 Excel 수식과 마찬가지로 random_dataframe 함수를 호출해 보세요.
=random_dataframe(10, 5)
원하는 대로 행과 열의 수를 변경할 수 있습니다.
동일한 방식으로 미리 정의된 데이터를 Excel에 전달할 수 있습니다. Pandas를 사용하여 Excel 데이터를 Python 스크립트로 가져올 수도 있습니다.
PyXLL의 한계
- Windows 및 Excel 호환성: PyXLL은 주로 Windows용으로 설계되었으며 Windows의 Microsoft Excel에서 작동합니다. Windows 환경에 최적화되어 있으므로 Windows가 아닌 플랫폼에서는 기능이 제한되거나 호환성 문제가 있을 수 있습니다.
- 배포: PyXLL 기반 스프레드시트를 최종 사용자에게 배포하려면 최소한의 종속성으로 Python을 설치하거나 스프레드시트와 함께 번들로 제공되는 Python 런타임이 필요합니다. 이는 PyXLL 기반 스프레드시트를 사용하려는 사용자가 컴퓨터에 Python을 설치해야 함을 의미합니다.
- 학습 곡선: PyXLL을 효과적으로 사용하려면 Python 프로그래밍에 대한 지식과 Excel의 개체 모델에 대한 지식이 필요합니다. Python 또는 Excel의 개체 모델에 익숙하지 않은 사용자는 PyXLL의 기능을 완전히 활용하기 전에 이러한 개념을 배우는 데 시간을 투자해야 할 수도 있습니다.
- 라이선스 비용: PyXLL은 상용 제품이며 사용량 및 요구 사항에 따라 사용과 관련된 라이선스 비용이 발생할 수 있습니다. PyXLL 사용 비용은 사용자 수, 배포 규모, 라이선스 계약과 같은 요소에 따라 달라집니다.
'Python' 카테고리의 다른 글
Python If-Else 문을 사용하는 방법 (2) | 2023.12.01 |
---|---|
Python과 데이터베이스를 사용하여 등록 앱을 만드는 방법 (2) | 2023.11.14 |
데이터 구조와 알고리즘 코딩 과제를 연습할 수 있는 사이트 7개 (0) | 2023.11.13 |
모든 Python 프로그래머가 알아야 할 7가지 목록 관련 함수 (4) | 2023.11.09 |
Pandas와 Python으로 데이터 랭글링을 공부하는 7단계 (62) | 2023.10.28 |