# UDF 스크립트 파일의 예
# 윈도우용 엑셀 전용으로 macOS에서는 아직 구현이 안 되었다.
import xlwings as xw
@xw.func
def hello(name):
return f"Hello {name}!"
설정과 배포에 대한 사항도 앞서 10장에서 언급한 것과 같다.
다만, UDF는 직접 배포를 해야 하는데, 커스텀 애드인을 만드는 것도 좋다. Link
12.2 케이스 스터디: 구글 트렌드¶
12.2.1 구글 트렌드 소개¶
CSV 파일을 받아서 이를 quickstart 프로젝트의 엑셀 워크북에 복사
이 워크북을 사용해 엑셀에서 바로 UDF로 데이터를 분석하는 방법
12.2.2 데이터프레임과 동적 배열¶
@xw.func
데코레이터가 데코레이터 중 가장 위에 있어야 한다.
@xw.arg
데코레이터는 options
메서드가 엑셀윙스 range
객체에 제공하는 것과 같은 기능을 UDF에 제공
@xw.ret
반환 데코레이터에 expand="table"
옵션을 전달하면 반환된 데이터프레임의 크기에 맞게 CSE 배열 (동적 배열을 지원하지 않는 예전 버전의 엑셀)의 크기를 조절
12.2.3 구글 트렌드에서 데이터 가져오기¶
구글 트렌드에서 직접 데이터를 가져오는 UDF를 만들어 보자.
pytrends
모듈 Link
12.2.4 UDF와 그래프¶
셀에서 함수를 호출하여 판다스의 그래프를 그려서 넣을 수 있다.
12.2.5 UDF 디버깅¶
12.3 고급 UDF 주제¶
12.3.1 기본적인 성능 최적화¶
애플리케이션 간 (엑셀-파이썬) 호출을 최소화하라. - 즉, UDF는 적게 사용할수록 좋다.
단일 셀 수식으로 만들면 모든 셀을 순회하며 계산하기 때문에 UDF는 매번 엑셀-파이썬을 호출할 수 밖에 없다.
그러므로, 배열 기반 수식 (넘파이 배열로 읽기)을 사용하는 것이 좋다.
기본 타입의 값 사용 - 데코레이터의 convert인자에 raw
문자열 전달
윈도우의 경우 pywin32를 바탕으로 수행하는 데이터 준비와 정리 단계를 생략하겠다는 의미이다.
12.3.2 캐싱¶
결정적 함수, 즉, 입력이 같으면 결과도 항상 같은 함수를 호출한다면 그 결과를 캐시에 저장
functools
모듈의 lru_cache
데코레이터를 사용하자.
128개의 결과를 보관하면서 가장 오래된 결과를 제거
캐시를 사용하면 반복된 호출이 빨라질 뿐만 아니라, 구글에 보내는 요청의 개수 자체를 줄일 수 있다.
Tip: 파이썬 버전에 따라 이름이 바뀌었다.
3.8 버전 미만에서 @lru_cache()
3.9 버전 이상에서 @cache
로 바뀌었고, 불러들일 때도 cache
로 임포트해야 한다.
12.3.3 sub 데코레이터¶
엑셀에서 파이썬 함수를 서브프로시저로 임포트하여 RunPython 호출을 직접 작성할 필요가 없다.
이는 윈도우에서만 계속 사용할 예정이라면 속도를 높일 수 있다.
Refer 데코레이터에 대한 더 자세한 설명 Link
12.4 요약¶
'Prev Contents > Automation tools' 카테고리의 다른 글
[엑셀이 편해지는 파이썬] 11장. 파이썬 패키지 추적기 (293~326p) (0) | 2022.08.21 |
---|---|
[엑셀이 편해지는 파이썬] 10장. 파이썬으로 강화된 엑셀 도구 (277~292p) (0) | 2022.08.21 |
[엑셀이 편해지는 파이썬] 9장. 엑셀 자동화 (245~275p) (0) | 2022.08.20 |
[엑셀이 편해지는 파이썬] 8장. 판다스를 사용한 엑셀 파일 조작 (211~242p) (0) | 2022.08.20 |
[엑셀이 편해지는 파이썬] 7장. 판다스를 사용한 엑셀 파일 조작 (197~210p) (0) | 2022.08.19 |