VBA to OfficeJS Web Add-in으로의 전환
개요
엑셀에서의 자동화와 복잡한 계산은 VBA를 사용하는 것이 일반적입니다.
Excel C-API를 사용하는 XLL과 VSTO도 있지만 어느 정도 개발언어를 다룰 줄 알아야 하기에 일반적이라고 말하긴 어려울 것 같습니다. 또한 Windows PC에서만 사용할 수 있는 것이 제한사항입니다.
2010년 중반, MS가 클라우드 서비스에 집중하면서 Office_엑셀은 이제 WindowPC 뿐만 아니라 Mac맥과 Linux로의 사용환경도 확대되었습니다. 이 때 즈음 OfficeJS(Javascript)라는 VBA를 대체할 만한 새로운 환경을 만들었지만 23년 현재에도 여전히 많이 사용되지는 않습니다. 하지만 몇 년을 사용하다보니 브라우저 기반의 작업을 하는 사람 들에게는 JavaScript기반 OfficeJS Add-in을 활용하는 것도 나쁘지 않다고 생각됩니다.
이런저런 기사들을 보면 앞으로 몇 년 뒤에도 여전히 vba를 사용하는 사람들이 많겠지만, javasciprt(typescript)나 파이썬을 활용해서 vba를 대신할 무언가도 많이 쓸 세상으로 바뀌어 있을 것 같다는 것다는 생각입니다.
2년 전 제 생각은 틀렸습니다. OfficeJS가 만들고 배포가 그렇게 쉽지만은 않습니다.
MS Excel엑셀은 개인PC에서 오프라인으로 작업이 가능합니다. 반면 비슷하지만 웹Web에서만 사용가능한, 그리고 무료인 구글스프레드시트는 태생이 온라인입니다. 그렇다 보니 브라우저에서 모든? 것을 실행합니다. WEB에서 실행되기에 Javavscript기반의 구글스프레드시트는 VBA와 비슷한 기능을 하는 App-Script라는 기능을 가지고 있습니다. 사용해 보면 VBA와 차이가 없을 뿐더러 정말 그 기능의 편리함을 느끼게 됩니다. 이와 비교하면 MS엑셀이 오래 전 개발을 중단한 예전 프로그램처럼 느껴집니다. 이것이 경쟁의 요소가 되었는지 2017년~전후로 MS의 엑셀도 javascript기반의 OfficeJS Add-in(vba와 동일한 기능을 가진)을 내놓았습니다. VBA와 같은 custom function addin을 온라인/오프라인 엑셀에서 사용할 수가 있게 된 것입니다. 그리고 몇 년이 지난 지금은 꽤나 vba를 대신할 것처럼 많은 기능을 지원합니다.
- ScriptLab 이라는 javascript기반의 vba매크로기록기 같은 것도 생겼고
- vscode에서 또는 yo generator office addin을 통한 JS Web add-in 을 만들어서 사용할 수 있습니다.
https://docs.microsoft.com/en-us/office/dev/scripts/resources/vba-differences
https://zdnet.co.kr/view/?no=20201113094632 (귀섬의 MS합류 기사)
2020년도에는 python 창시자 ‘귀도 반 로섬’이 MS 로 합류했다고 해서 vba >> python으로 해줄까 싶었는데 그건 아닐 것 같고 몇 년 뒤에는 파이썬의 openpyxl, xlwings 같은 파이썬 기반의 툴이 하나 더 나올지도 모르겠다. 그렇다면 파이썬이 또 한번 인기가 올라가겠지만 최근 PowerBI에서 파이썬 언어와 쿵짝?을 하는 기능들이 추가되는 것을 보면 파이썬을 활용은 꼭 excel이 아닐 수도 있다.
Javascript가 아닌, 파이썬은 어떤가?
최근 몇 년간 빅데이터, AI관련 열풍으로 저조차도 파이썬이 대세처럼 여겨져 배우고 있습니다. 프로그래밍에 입문하거나 간단히 작성해 빠르게 사용하려면 좋은 언어라고 생각됩니다.
파이썬을 활용하여 openxl, xlwings, pyxll 등 엑셀에서 python을 사용할 툴이 나와 있지만 그럼에도 VBA의 환경과 비교해서는 접근성이 높지 않습니다. 파이썬으로 작동하는 엑셀파일은 다른 사람의 컴퓨터에서도 동일하게 사용하려면 하려면 파이썬을 설치해야 하고 파이썬이 사용하는 라이브러리-모듈을 설치하는 작업이 필요합니다. 이는 생각처럼 모두가 동일조건에서 사용해야 할 조건이라면 문제를 발생할 조건이 됩니다. 그에 비하면 기본으로 설치된 VBA는 이러한 점에서는 문제점이 상대적으로 없습니다.
파이썬을 활용한 엑셀작업은, 무료툴로는 현재로써는 가장 유명한 것이 xlwings입니다. 하지만 python을 각자의 컴퓨터에 설치해야 한다는 점은 여전히 고려해 볼만한 점이고 속도가 생각보다 빠르지 않습니다.
OfficeJS Add-in은 Javascript라는 또다른 언어를 사용하야 합니다. 하지만 브라우저를 사용하는 Web버전, Desktop버전 모두 동작가능합니다. 설치는 엑셀의 추가기능
항목에서 경로를 추가하거나 구입하기로 추가하면 사용이 가능합니다.
배포의 문제
xlwings나 vba나 모두 2가지가 번거롭거나 공개를 꺼려지는 사항은 마찬가지입니다
- 첫째는 스크립트가 엑셀파일 자체에 귀속이 된다
- 둘째는 시간을 들일 결과물이 공유하는 순간 쉽게 공유되어 버린다
같이 사용하려고 만든 것도 있지만 본인의 작업/일을 효율성을 높이려고 오랜시간 만들었는데 엑셀파일을 공유하는 순간순간 다른 사람에게도 이것을 열어볼 수 있습니다. 동료라면 모르겠지만 이것이 다른 회사, 외부인, VBA를 본인의 업으로 하는 사람에게는 민감한 사항이 될 수도 있습니다.
그런데, Web기반의 OfficeJS Addin은 Server에서 중요계산을 맡아 처리하면 이러한 부분이 어느 정도 해결이 가능해 집니다. 배포의 관점에서도 많은 코드 중에 몇 줄을 수정하려면 파일로 공유되었을 경우 일일이 그 파일을 수정해야 하지만 사실상 어렵습니다. Web Add-in은 중앙배포식이라 내가 가진 코드만 수정하면 이전 결과물에도 모두 적용이 가능합니다.
접근 권한이나 파일의 공유 부분에서도 제한적으로 공개할 수 있으니 이러한 부분의 관리도 상대적으로 수월합니다.
Office add-in 를 사용가능한 환경
안타깝게도 VBA를 대신할 JavaScript기반의 CustomFunction은 모든 오피스 버전에서 지원하지는 않습니다.
설치버전은 2021년 이후 부터 (2019년 버전 사용불가), 구독형 Microsoft365은 항상 최신 버전이기에 시점에 상관없이 사용가능합니다.
https://docs.microsoft.com/en-us/javascript/api/requirement-sets?view=common-js-preview