OfficeAddin:: VBA to OfficeJS Web Add-in으로의 전환

엑셀에서의 자동화와 복잡한 계산은 vba가 유일한 선택이였으나 이젠 꼭 그런 환경은 아닐 수도 있다. 점점 Web브라우저 에서의 추가기능이 강화되다 보니 JavaScript custom function 의 편리성이 늘어만 가기에 JavaScript기반 web add-in을 써보는 것도 고려해 봄직 하다. 이런저런 기사들을 보면 앞으로 몇 년 뒤에도 여전히 vba를 사용하는 사람들이 많겠지만,  javasciprt(typescript)나 파이썬을 활용해서 vba를 대신할 무언가도 많이 쓸 세상으로 바뀌어 있을 것 같다는 것이 내 생각이다.

 

MS Excel엑셀은 개인PC에서 오프라인으로 작업이 가능하다. 반면에 비슷하지만 웹web에서만 사용가능한, 그리고 무료인 구글스프레드시트는 태생이 온라인이다 보니 브라우저에서 모든? 것을 실행한다. 그래서 javavscript기반의 구글vba- App Script를 접해 보면 vba와 차이가 없을 뿐더러 정말 그 기능의 편리함을 느껴보면 MS엑셀이 오래전 프로그램처럼 느껴지기도 한다. 이것이 경쟁의 요소가 되었는지 2017년~전후로 부터 javascript기반의 (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

JS기반 addin의 포이션

 

https://zdnet.co.kr/view/?no=20201113094632   (귀섬의 MS합류 기사)
2020년도에는 python 창시자 '귀도 반 로섬'이 MS 로 합류했다고 해서 vba >> python으로 해줄까 싶었는데 그건 아닐 것 같고 몇 년 뒤에는 파이썬의 openpyxl, xlwings 같은 파이썬 기반의 툴이 하나 더 나올지도 모르겠다. 그렇다면 파이썬이 또 한번 인기가 올라가겠지만 최근 PowerBI에서 파이썬 언어와 쿵짝?을 하는 기능들이 추가되는 것을 보면 파이썬을 활용은 꼭 excel이 아닐 수도 있다.

 

 


JavaScript여만 하는가?

파이썬이 대세인데,,,, 파이썬을 써보는 것은 어떨까? 싶어서 1년 넘게 이것저것들을 건드려 봤다.

openxl, xlwings, pyxll 많이 변화해가는 것들이지만 그럼에도 vba의 환경과 비교해서 접근성이 높지 않다. 새롭게 배우는 사람들에게는 기존의 vba legacy code가 더 빠른 작업환경을 제공하고 자료도 많다. 

그나마 가장 대체가능한 것이 현재로써는 xlwings인데 python을 각자의 컴퓨터에 깔아야 한다는 것은 같은 파일을 공유해야 하는 공동의 작업에서는 제약사항이 많다.

 

 

 

 


배포의 문제

xlwings나 vba나 어느 것을 보자면 2가지가 번거롭다.

첫째는 스크립트가 엑셀파일 자체에 귀속이 된다는 것이고,

둘째는 시간을 들일 결과물이 공유하는 순간 쉽게 공유되어 버린다는 점이다.

 

같이 사용하려고 만든 것도 있지만 일을 효율성을 높이려 오랜시간 만들었는데 이것이 파일을 공유하는 순간 다른 사람에게도 간다. 동료라면 모르겠지만 이것이 다른 회사, 다른 외부인, vba를 업으로 하는 사람에게는 꽤나 민감한 사항이 될 수도 있다.

 

그런데, web addin의 경우에는 server에서 계산만 해준다면 일부 노출되는 기반 script는 어쩔 수 없더라도 나머지는 위 2가지 문제를 해결이 가능해 진다. 1만줄 가까이 되는 코드 중에 단위변환 하는 것이 문제가 있어서 소수점 1자리를 수정했는데, 이를 사용하는 엑셀 모두를 찾아서 바꿀 수 없다. (내 파일이면 가능한데, 이미 공유된 문서는 다시 주워담기 힘들다) 

 

권한 때문에 DB가 물려있고 key가 들어가 있어서 무한정 공유가 힘든 것도 있다. 그런데 내 엑셀화면에서는 뭔가 자동으로 수천 줄의 항목이 자동으로 몇 초 안에 변경되는 것을 보면 맡겨놓았다는 듯 '무작정' 공유해 주세요! 를 외치는 사람도 있다. 

 

종종 생기는 이런 상황이 항상 달갑지만은 않다. 이런 문제를 줄여보려면 새롭게 vba를 배우려는 사람입장이거나 앞으로도 vba를 써야 하는 사람이라면 VSCODE 등의 편집기를 활용할 수 있고, 배포의 편리함/코드 보완을 고려하면  JavaScript office add-in를 배워보는 것도 좋겠다란 생각이 든다. 

 

_내년에 들어올 신입사원들에게는 javascript를 공부하라 해볼까_

 

 

 

 

 


Office add-in 를 사용가능한 환경

 

안타깝게도 VBA를 대신할 JavaScript기반의 CustomFunction은 모든 오피스버전에서 지원하지는 않는다.

설치버전은 2021년 이후 부터 (2019년버전 안됨), 구독형 o365은 항상 최신 버전이기에 시점에 상관없이 사용가능하다. 

 

 

 

https://docs.microsoft.com/en-us/javascript/api/requirement-sets?view=common-js-preview 

Platform Extension points API requirement sets Common APIs
Office on the web - TaskPane
- Content
- CustomFunctions
- Add-in Commands
- ExcelApi 1.1
- ExcelApi 1.2
- ExcelApi 1.3
- ExcelApi 1.4
- ExcelApi 1.5
- ExcelApi 1.6
- ExcelApi 1.7
- ExcelApi 1.8
- ExcelApi 1.9
- ExcelApi 1.10
- ExcelApi 1.11
- ExcelApi 1.12
- ExcelApi 1.13
- ExcelApi 1.14
- ExcelApi 1.15
- ExcelApiOnline
- DialogApi 1.1
- IdentityAPI 1.3
- RibbonApi 1.1
- SharedRuntime 1.1
- KeyboardShortcuts 1.1
- BindingEvents
- CompressedFile
- DocumentEvents
- File
- MatrixBindings
- MatrixCoercion
- Selection
- Settings
- TableBindings
- TableCoercion
- TextBindings
- TextCoercion
Office on Windows
(connected to a Microsoft 365 subscription)
- TaskPane
- Content
- CustomFunctions
- Add-in Commands
- ExcelApi 1.1
- ExcelApi 1.2
- ExcelApi 1.3
- ExcelApi 1.4
- ExcelApi 1.5
- ExcelApi 1.6
- ExcelApi 1.7
- ExcelApi 1.8
- ExcelApi 1.9
- ExcelApi 1.10
- ExcelApi 1.11
- ExcelApi 1.12
- ExcelApi 1.13
- ExcelApi 1.14
- ExcelApi 1.15
- DialogApi 1.1
- IdentityAPI 1.3
- ImageCoercion 1.1
- ImageCoercion 1.2
- OpenBrowserWindowApi 1.1
- RibbonApi 1.1
- SharedRuntime 1.1
- KeyboardShortcuts 1.1
- BindingEvents
- CompressedFile
- DocumentEvents
- File
- MatrixBindings
- MatrixCoercion
- Selection
- Settings
- TableBindings
- TableCoercion
- TextBindings
- TextCoercion
Office 2021 on Windows
(one-time purchase)
- TaskPane
- Content
- CustomFunctions
- Add-in Commands
- ExcelApi 1.1
- ExcelApi 1.2
- ExcelApi 1.3
- ExcelApi 1.4
- ExcelApi 1.5
- ExcelApi 1.6
- ExcelApi 1.7
- ExcelApi 1.8
- ExcelApi 1.9
- ExcelApi 1.10
- ExcelApi 1.11
- ExcelApi 1.12
- ExcelApi 1.13
- ExcelApi 1.14
- DialogApi 1.1
- IdentityAPI 1.3
- ImageCoercion 1.1
- ImageCoercion 1.2
- OpenBrowserWindowApi 1.1
- RibbonApi 1.1
- SharedRuntime 1.1
- BindingEvents
- CompressedFile
- DocumentEvents
- File
- MatrixBindings
- MatrixCoercion
- Selection
- Settings
- TableBindings
- TableCoercion
- TextBindings
- TextCoercion
Office 2019 on Windows
(one-time purchase)
- TaskPane
- Content
- Add-in Commands
- Not CustomFunction
  (vba)
- ExcelApi 1.1
- ExcelApi 1.2
- ExcelApi 1.3
- ExcelApi 1.4
- ExcelApi 1.5
- ExcelApi 1.6
- ExcelApi 1.7
- ExcelApi 1.8
- DialogApi 1.1
- ImageCoercion 1.1
- BindingEvents
- CompressedFile
- DocumentEvents
- File
- MatrixBindings
- MatrixCoercion
- Selection
- Settings
- TableBindings
- TableCoercion
- TextBindings
- TextCoercion
Office 2016 on Windows
(one-time purchase)

- TaskPane
- Content
- Not CustomFunction
  (vba)

- ExcelApi 1.1
- DialogApi 1.1*
- ImageCoercion 1.1      

 - BindingEvents
- CompressedFile
- DocumentEvents
- File
- MatrixBindings
- MatrixCoercion
- Selection
- Settings
- TableBindings
- TableCoercion
- TextBindings
- TextCoercion
Office 2021 on Mac
(one-time purchase)

- TaskPane
- Content
- CustomFunctions
- Add-in Commands      
- ExcelApi 1.1
- ExcelApi 1.2
- ExcelApi 1.3
- ExcelApi 1.4
- ExcelApi 1.5
- ExcelApi 1.6
- ExcelApi 1.7
- ExcelApi 1.8
- ExcelApi 1.9
- ExcelApi 1.10
- ExcelApi 1.11
- ExcelApi 1.12
- ExcelApi 1.13
- ExcelApi 1.14
- DialogApi 1.1
- IdentityAPI 1.3
- ImageCoercion 1.1
- ImageCoercion 1.2
- OpenBrowserWindowApi 1.1
- RibbonApi 1.1
- SharedRuntime 1.1
- KeyboardShortcuts 1.1  
- BindingEvents
- CompressedFile
- DocumentEvents
- File
- MatrixBindings
- MatrixCoercion
- PdfFile
- Selection
- Settings
- TableBindings
- TableCoercion
- TextBindings
- TextCoercion

 

 

 

 



_

반응형