매크로 마스터를 위한 Google Apps Script 튜토리얼

<블록 인용>

유능한 경영자는 시간이 제한적인 요소라는 것을 알고 있습니다... 아마도 유능한 경영자를 애정 어린 시간에 대한 애정만큼 구별하는 것은 없을 것입니다.

피터 드러커

시간은 우리의 가장 소중한 자원입니다. 우리는 일반적으로 가장 높은 금전적 가치를 지니고 있을 뿐만 아니라 지속적으로 도전하고 직업 만족도를 극대화하기 위해 우리가 할 수 있는 가장 영향력 있고 가장 가치를 창출하는 활동에 이 활동을 사용하고자 합니다.

시간을 더 잘 활용하기 위해 효율성과 생산성을 향상시키는 방법에는 여러 가지가 있습니다. Google 스프레드시트에 대한 이전 기사에서 온라인 공동작업의 힘이 생산성 향상의 핵심이라는 점에 대해 자세히 설명했습니다.

다른 기사에서 저는 Python 프로그래밍 언어가 재무 전문가를 위한 강력한 분석 및 작업 자동화 도구가 될 수 있음을 보여주었습니다.

여기에서 영감을 얻어 이제 Google Apps Script 자습서를 소개하고자 합니다. Google Apps Script를 사용하면 JavaScript로 스크립트와 프로그램을 작성하여 스프레드시트, 문서, 프레젠테이션, Gmail, 드라이브 등 Google G Suite의 제품을 자동화, 연결 및 확장할 수 있습니다. 그것을 배우려면 스크립트 작성과 마찬가지로 시간 투자가 필요하지만 생산성이 향상되고 기회가 추가로 열리므로 그만한 가치가 있습니다.

첫 번째 단계로 친숙한 개념인 매크로부터 살펴보겠습니다.

Google 스프레드시트에서 매크로 기록 및 사용

Excel 작업에 상당한 시간을 할애했다면 어느 시점에서 Excel의 VBA(Visual Basic for Applications) 매크로 인터페이스와 접하게 될 것입니다. 녹음하거나 직접 작성하거나 다른 사람이 만든 것을 편승하여.

매크로는 반복적이고 지루한 워크플로를 자동화하는 좋은 방법입니다. VBA는 배우는 데 많은 시간을 할애한 언어가 아닐 수도 있지만 VBA의 장점은 생산성을 높이고 자신만의 매크로를 만드는 데 실제로 필요하지 않다는 것입니다. 자동화하려는 워크플로를 간단히 기록한 다음 코드로 이동하여 매크로를 보다 일반적으로 만드는 데 필요한 작은 변경을 수행할 수 있습니다.

어떤 면에서 VBA는 비기술자에게 코딩을 소개하는 방법에 대한 훌륭하고 잊혀진 교훈입니다. . 행동을 기록하고 나중에 검토할 수 있도록 코드를 채우는 방법은 실제로 교과서를 읽고 수동적으로 자습서를 보는 것보다 훨씬 더 실용적인 방법입니다.

VBA의 동일한 기록 기능을 Google 스프레드시트에서 사용할 수 있습니다. 다음은 사용 방법의 간단한 예입니다.

테이블을 가져오기 위해 IMPORTHTML 쿼리를 사용하여 몇 가지 샘플 데이터로 시작하겠습니다. 이 예에서는 Wikipedia에서 세계 15대 헤지펀드 목록을 다운로드했습니다. 당연하지만 이것은 임의의 예입니다. 주제보다 응용 프로그램에 더 집중할 수 있도록 하려는 것입니다.

매크로 기록 프로세스는 도구> 매크로> 매크로 기록

메뉴 경로를 통해 시작됩니다.

그런 다음 기록하려는 작업(PC 형식)을 살펴봅니다.

  1. 첫 번째 행 선택
  2. Shift + Ctrl + 아래쪽 화살표를 눌러 전체 선택
  3. Ctrl + C 복사
  4. Shift + F11을 눌러 새 시트 만들기
  5. 시트에 새 이름 지정
  6. Shift + Control + V를 눌러 값 붙여넣기

완료되면 하단의 매크로 창에서 저장 버튼을 누르고 이름과 선택적 키보드 단축키를 지정합니다.

이러한 동일한 단계를 통해 정확하게 복제할 수 있는 간단한 작업의 경우 프로세스가 여기서 종료되고 매크로 사용을 바로 시작할 수 있습니다. 하지만 이 경우 코드를 사용하기 전에 몇 가지 변경을 해야 합니다. 예를 들어 복사 대상 시트는 매번 다른 이름을 가져야 합니다. 이 작업을 수행하는 방법을 살펴보겠습니다.

수동으로 Google Apps 스크립트 작성

이제 우리는 처음으로 Google Apps Script의 뼈대를 보게 될 것입니다. Google 서버에서 실행되는 프로그래밍 플랫폼입니다. 이것은 우리의 매크로를 강화하고 응용 프로그램 자체에 대한 매우 복잡한 워크플로 및 추가 기능을 만들 수 있습니다. 스프레드시트 작업뿐만 아니라 실제로 Google G Suite 내에서 상호 연결된 거의 모든 작업을 자동화하는 데 사용할 수 있습니다.

Apps Script의 프로그래밍 언어는 JavaScript입니다. , 가장 인기 있는 프로그래밍 언어 중 하나입니다. 즉, 광범위하게 배우고자 하는 모든 사람을 위한 풍부한 리소스가 있습니다. 그러나 VBA와 마찬가지로 실제로 필요하지 않습니다. 동일한 녹음 기능을 사용하고 자동으로 반복할 수 있는 단계를 수행하기만 하면 됩니다. 녹음 결과가 조잡해 보일 수 있고 원하는 작업과 완벽하게 일치하지 않을 가능성이 높지만 충분한 출발점을 제공할 것입니다. 이제 방금 녹음한 스크립트에 대해 수행해 보겠습니다.

녹음할 때 최종 녹음에서 캡처되고 싶지 않은 추가 단계를 실수로 녹음하지 않도록 주의하는 것이 좋습니다. 녹음 버튼은 캡처되어 스크립트를 실행할 때마다 반복됩니다. 스크립트를 편집할 때 첫 번째 단계는 스크립트를 정리하고 그러한 단계를 제거하는 것입니다. 파일 메뉴에서 도구> 스크립트 편집기로 이동하여 자세히 살펴보겠습니다.

JavaScript를 알고 있다면 이를 즉시 인식할 수 있으며 최신 JavaScript에서 볼 수 있는 "let" 또는 "const" 대신 "var" 키워드를 보고 놀랄 수도 있습니다. 이는 Apps Script의 JavaScript 버전이 상당히 오래되었고 언어의 최신 기능을 많이 지원하지 않는다는 사실을 반영합니다. 마지막으로 최신 언어 기능을 사용하고 싶은 분들을 위해 해결 방법을 소개하겠습니다.

스크립트를 처음 실행하면 스크립트가 모든 데이터를 수정(및 잠재적으로 삭제할 수 있음)할 수 있으므로 승인을 요청할 것입니다. 다른 Google 제품의 승인 절차를 가장 잘 알고 계실 것입니다.

이제 코드 수정을 시작할 수 있습니다. 변경해야 하는 사항은 미미하지만 처음 이 작업을 수행하는 경우 Sheets Apps Script 문서를 통한 빠른 검색 및/또는 날짜 작업과 같은 JavaScript 개념의 빠른 조회가 필요할 수 있습니다. 여기에서 JavaScript가 널리 사용되는 언어라는 사실이 유용합니다. 직면한 문제나 생각나는 기능에 대한 솔루션은 검색어를 직관적인 방식으로 표현하면 일반적으로 빠르게 찾을 수 있습니다.

원래 기록된 버전에서 이 버전의 스크립트에서 변경된 사항은 우리가 만드는 새 시트의 하드코딩된 이름 대신 오늘 날짜로 이름을 지정한다는 것입니다. 또한 이 새 시트를 참조하도록 끝부분의 복사 경로도 변경합니다. 마지막 네 행은 셀 값 변경, 열 크기 조정, 눈금선 숨기기와 같은 일부 서식 지정 작업을 수행하는 방법도 보여줍니다.

function createSnapshot() {
  var spreadsheet = SpreadsheetApp.getActive();
  var date = new Date().toISOString().slice(0,10);
  var destination = spreadsheet.insertSheet(date);
  
  spreadsheet.getRange('HTML!A1:F1').activate();
  spreadsheet.getSelection()
    .getNextDataRange(SpreadsheetApp.Direction.DOWN)
    .activate();
  
  spreadsheet.getActiveRange()
    .copyTo(SpreadsheetApp.setActiveSheet(destination)
    .getRange(1,1),
    SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
  
  var sheet = spreadsheet.setActiveSheet(destination)
  sheet.getRange("D1").setValue("AUM $bn")
  sheet.setHiddenGridlines(true);
  sheet.getRange("A1:D1").setFontWeight("bold");
  sheet.autoResizeColumns(1, 4);
};

지금 스크립트를 실행하면 새 시트의 이름이 실제로 오늘 날짜로 지정되고 기본 시트에서 값(공식이 아님)으로 복사된 정보가 포함되어 있음을 알 수 있습니다.

이제 동일한 기록 프로세스를 사용하여 차트 시각화를 추가할 수 있습니다. 이것을 사용하여 3개의 간단한 차트를 만들었습니다.

각각의 코드를 정리하면 다음과 같습니다.

function createColumnChart() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C1:D16').activate();
  var sheet = spreadsheet.getActiveSheet();
  chart = sheet.newChart()
  .asColumnChart()
  .addRange(spreadsheet.getRange('B1:D16'))
  .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
  .setTransposeRowsAndColumns(false)
  .setNumHeaders(-1)
  .setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
  .setOption('useFirstColumnAsDomain', true)
  .setOption('curveType', 'none')
  .setOption('domainAxis.direction', 1)
  .setOption('isStacked', 'absolute')
  .setOption('series.0.color', '#0b5394')
  .setOption('series.0.labelInLegend', 'AUM $bn')
  .setPosition(19, 6, 15, 5)
  .build();
  sheet.insertChart(chart);
};

다시 말하지만, 일부 옵션이 혼란스러워 보이더라도 걱정하지 마십시오. 이 옵션은 모두 자동 생성되므로 불필요한 단계를 제거하고 나중에 약간의 조정을 할 수 있을 만큼 충분히 이해하면 됩니다.

고급 Google Apps 스크립트 예제:Google 드라이브 및 프레젠테이션에 시트 연결

이제 모든 것이 구체화되기 시작했습니다. 그러나 우리가 원하는 실제 출력이 스프레드시트가 아니라 프레젠테이션이라면 어떻게 될까요? 이 경우 여기에서 대부분의 작업이 여전히 수동일 수 있으며 반복적으로 이 작업을 수행해야 하는 경우 많은 시간을 절약할 수 없습니다.

이제 스프레드시트의 예제 데이터를 사용하여 프레젠테이션 생성을 자동화하는 방법을 살펴보겠습니다.

이 연습은 이제 다음 두 가지 이유로 더욱 발전되었습니다.

  1. 스프레드시트 외에도 Google 프레젠테이션(및 Google 드라이브)을 사용하는 방법에 익숙해져야 합니다.
  2. 프레젠테이션에서 또는 일반적으로 G Suite 앱 간에 작업할 때는 '매크로 기록' 기능을 사용할 수 없습니다. 즉, 처음부터 스크립트를 작성하려면 Apps Script에 대해 충분히 알고 있어야(그리고 각 G Suite 제품에 대한 문서 탐색에 익숙해야 함).

다음 예제는 시작하고 익숙해지는 데 도움이 되는 몇 가지 기본 구성 요소를 제공하기 위한 것입니다.

먼저 스크립트를 사용하여 나중에 콘텐츠로 채우려는 템플릿을 만들어 보겠습니다. 다음은 제가 함께 만든 두 개의 간단한 프레젠테이션 슬라이드입니다.

다음으로 스크립트에서 참조해야 하므로 이 템플릿의 ID를 가져와야 합니다. 이 ID는 실제로 브라우저의 URL에서 볼 수 있는 무작위로 보이는 일련의 문자와 숫자이기 때문에 무의식적으로 여러 번 보았을 것입니다.

https://docs.google.com/presentation/p/this_is_your_presentation_ID /edit#slide=id.p.

이제 원본 스크립트에 다음 줄을 추가해야 합니다. 다시 승인을 요청하는 메시지가 표시되며 이번에는 Google 드라이브에 액세스할 수 있습니다.

function createPresentation() {
  var templateId = "insert_your_template_presentation_id_here";
  var template = DriveApp.getFileById(templateId);
  var copy = template.makeCopy("Weekly report " + date).getId();
  var presentation = SlidesApp.openById(copy);
}

이 코드 스니펫을 실행하면 즉각적인 시각적 피드백이 표시되지 않지만 템플릿을 저장한 Google 드라이브의 폴더를 살펴보면 템플릿의 복사본이 실제로 생성되었으며 현재의 파일 이름의 날짜. 좋은 출발을 하고 있습니다!

이제 더 많은 빌딩 블록을 사용하여 손이 아닌 프로그래밍 방식으로 콘텐츠를 채우기 시작하겠습니다. 동일한 함수에 다음 행을 추가합니다.

  presentation.getSlides()[0]
    .getPageElements()[0]
    .asShape()
    .getText()
    .setText("Weekly Report " + date);

오늘 날짜를 포함하도록 첫 페이지를 변경했기 때문에 이제 상황이 조금 더 흥미로워지고 있습니다. 스프레드시트와 마찬가지로 프레젠테이션에서도 각각 속성과 메서드(예:연결된 기능)가 있는 개체(클래스로 표시)로 작업합니다. 이들은 SpreadsheetsApp, DriveApp 또는 SlidesApp이 최상위 개체인 계층 구조로 구성됩니다. 위의 코드 조각에서 우리는 편집하려는 요소(이 경우 텍스트 상자의 텍스트)에 도달하기 위해 이 계층을 단계별로 이동해야 합니다. 실질적으로 말하자면 편집하려는 TextRange 개체에 도달할 때까지 Presentation, Slide, PageElement 및 Shape 개체를 통해 도달하는 것을 의미합니다.

어떤 유형의 개체를 처리하고 있는지 추적하는 것은 혼란스러울 수 있으며 잘못된 개체에 작업을 적용하려고 시도하여 발생하는 버그는 해결하기 어려울 수 있습니다. 불행히도 스크립트 편집기 자체의 도움말 기능과 오류 메시지가 항상 여기에서 많은 지침을 제공하는 것은 아닙니다. 이러한 관심이 최소한 품질 관리 관행을 개선할 것이라는 점에서 은색입니다.

프레젠테이션을 만들고 제목을 업데이트했으므로 이제 새 차트 중 하나를 프레젠테이션에 삽입할 차례입니다. 객체의 계층 구조를 염두에 두고 다음 코드를 이해해야 합니다.

  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName(date);
  var chart = sheet.getCharts()[0];
  
  var position = {left: 25, top: 75};
  var size = {width: 480, height: 300};
  
  presentation.getSlides()[1]
    .insertSheetsChart(chart,
      position.left,
      position.top,
      size.width,
      size.height);

전체 스크립트를 실행하면 출력 프레젠테이션은 다음과 같아야 합니다.

이 예제가 원칙을 설명하고 자신의 실험을 시작할 수 있는 영감을 제공하기를 바랍니다. 생각해 보면 오늘날 회사에서 실제로 이러한 방식으로 자동화되어야 하는 수동 작업의 몇 가지 예를 찾을 수 있을 것입니다. 데이터를 한 형식 및/또는 장소에서 다른 장소로 기계적으로 뒤섞는 것이 아니라 생각, 분석 및 판단을 적용할 시간을 확보하는 데 도움이 됩니다. 개발 경험 개선 앞에서 언급했듯이 Google Apps Script에서 지원하는 JavaScript 버전은 구식이며 기능 온라인 스크립트 편집기의 기능은 매우 제한적입니다. 매크로를 기록하거나 수십 줄을 작성하는 경우에는 실제로 알아차리지 못할 것입니다. 그러나 주간 또는 월간 보고의 모든 측면을 자동화하려는 야심 찬 계획이 있거나 플러그인을 구축하려는 경우 선호하는 개발 환경을 사용하여 개발할 수 있는 명령줄 도구가 있다는 사실을 알게 되어 기쁩니다. .

이러한 수준의 숙련도라면 JavaScript가 제공해야 하는 최신 기능을 활용하고 싶을 것입니다. 명령줄 도구를 사용하면 TypeScript에서도 개발할 수 있기 때문에 잠재적으로 더 많은 기능을 제공할 수 있습니다.

Google 스프레드시트 프로그래밍에 Python 사용

Apps Script로 작업하는 것이 마음에 들지 않는다면 사용 사례에 따라 다른 옵션이 있습니다. 더 고급 숫자 처리를 수행하거나 API 또는 데이터베이스에 연결하거나 단순히 JavaScript보다 Python 프로그래밍 언어를 선호하는 경우 Google의 Colaboratory는 값을 매길 수 없는 제품입니다. Google 서버에서 실행되는 Jupyter 노트북을 제공하므로 Google 드라이브 파일과 원활하게 통합되는 Python 스크립트를 작성할 수 있으며 'gspread' 라이브러리를 통해 스프레드시트 데이터로 쉽게 작업할 수 있습니다.

재무 기능에 Python을 사용하는 방법에 대한 기사에서 Python의 많은 이점에 대해 설명했으며 비즈니스 및 재무 컨텍스트에서 Python 및 Jupyter 노트북을 사용하는 방법에 대한 부드러운 소개 역할도 합니다. 저에게 매우 중요한 이점 중 하나는 Apps Script와 달리 Colaboratory의 Python 노트북이 대화형이므로 각 줄 또는 작은 코드 블록을 실행한 후 결과(또는 오류 메시지)를 볼 수 있다는 것입니다.

자동화는 중독성이 있습니다

이 Google Apps Script 튜토리얼은 Google의 코딩 언어를 통해 가능한 일을 간략하게 보여주었습니다. 가능성은 거의 무한합니다. 그러나 기술적인 배경이 없는 경우 코드 예제가 어려워 보일 수 있으며 Google Apps Script를 학습하여 얻은 생산성 향상이 필요한 시간 측면에서 상당한 투자를 능가하기에 충분하지 않을 수 있다고 스스로 생각할 수도 있습니다. 배우기 위해.

물론 이것은 귀하가 미래에 어떤 역할 유형을 갖고 있거나 가질 것으로 예상되는지를 포함하여 많은 요인에 따라 다릅니다. 그러나 여기에 표시된 예와 유사한 작업을 수행할 것으로 기대하지 않더라도 가능한 사항과 구현에 필요한 작업량을 이해하면 회사의 생산성을 개선하는 방법에 대한 생각과 아이디어를 촉발할 수 있습니다. 귀하의 고객 또는 개인적으로.

개인적으로, 나는 한 시간 분량의 지루한 수작업을 1분 이내에 완료하는 버튼을 누르는 것에 대한 만족을 증명할 수 있습니다. 50번째로 이 작업을 수행한 후에는 처음에 모든 것을 함께 엮는 데 보낸 몇 시간에 대해 감사하게 될 것입니다. 이는 궁극적으로 더 많은 부가 가치 추구를 위한 시간을 확보하는 데 도움이 되었습니다. 잠시 후 이러한 확장성 이점은 중독성이 있습니다.


기업 자금 조달
  1. 회계
  2. 사업 전략
  3. 사업
  4. 고객 관계 관리
  5. 재원
  6. 주식 관리
  7. 개인 금융
  8. 투자하다
  9. 기업 자금 조달
  10. 예산
  11. 저금
  12. 보험
  13. 은퇴하다