11/29/2016

Google Apps Script

1. Google Apps Script 관련사항 

구글에서 제공하는 datasheet와 document 관련된 apps에 관련 script가 존재하며,
본인은 datasheet를 가지고 간단한 script가 간단히 필요했기에 이를 가지고  TEST 한 결과 쉽게 작성가능했다.

다른 Apps도 쉽게 가능할 것 같으며, 복잡한 Apps은  Javascript를 전문적으로하는 Web 기술이 있어야 할것으로 생각된다.
하지만 구글에서 Manual을 제공을 하고 있어 , 이를 따라하면 누구나 쉽게 작성가능하다.
다만 한글 Manual 지원이 안되어서 문제일 뿐이다.


손쉽게 영어 단어 check script를 만들기 위해서 이것을 시작했지만, 별로 도움이 안되고
그냥 손으로 쓰는 것이 가장 도움이 되는 것 같다.

2. Datasheet Apps Script 

본인의 Gdrive에 가서 Datasheet 만들거나, 가진것을 가지고 TEST 해보자.
  1. open Google Datasheet 
  2. Tools > Script editor  or 도구->스크립터 편집기 실행 
  3. Test Function을 만들어보자. 
  4. Project를 저장하고, 권한을 설정하고 실행을 해보자. 
  5. 스크립터 편집기에서 보기->로그 보면 실행된 결과를 확인 가능하다. 
아래의 화면은 Script 편집기를 통해서 새로만든 프로젝트이다.
이곳에서 보기->로그를 통해 간단히 확인 가능하다.


// Google의 example을 간단히 TEST 

function logProductInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for (var i = 0; i < data.length; i++) {
    Logger.log('Product name: ' + data[i][0]);
    Logger.log('Product number: ' + data[i][1]);
  }
}







3. Datasheet 에 App Script TEST  

3.1 Basic Datasheet Apps Script  


아래와 같이 메세지를 알려주는 간단한 함수를 만들어 보자,
alert message로 변경을 하고 datasheet 값을 읽어 매번 알려주는 것이다.
위의 log를 alert로 변경을 하고, 너무 길면 적당히 알려주도록 15까지만 하자.
아래는 Javascript와 동일하다.

function logProductInfo() {
  
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var ui = SpreadsheetApp.getUi();
  var numfinsh=15;

  if(data.length < 15)
       numfinsh = data.length;
    
  for (var i = 0; i < numfinsh; i++) {
   
    var msg = "Test2 Number:" + i + " /" + data.length + "\n\n";
    
    msg += data[0][2] + ":" + data[i][2] + "\n";
    msg += data[0][3] + ":" + data[i][3] + "\n\n";
    msg += data[0][4] + ":"+ data[i][4] + "\n";         
    
    ui.alert(msg);                  

}
    
}



  • TEST 하는 방법
Google Driver에 스프레드시트 보기 및 관리 허가를 받는다.
실행버튼을 누르면 실행이 된다.

* 만약동작이 되지 않는다면 프로젝트에서 문서를 찾아서 직접 넣어 추가해보자.
  게시->부가기능으로 테스트

  • 실제적용하는 방법
트리거를 사용하는 방식, 즉 이벤트가 발생할때 함수를 호출하도록 설정.
위와 같이 하면 문서의 이벤트 발생시마다 함수가 호출이되어 적용이 됨


3.2 개선된 Datasheet Apps Script  

트리거로 파일 오픈할때 onOpen을 적용하여,  "My Menu" 만들어 함수를 실행하도록하자.
원하지 않는다면, 멈추는 기능을 추가하자.
물론 아래도 버그가 있다,
mySecondFunction이나, myThirdFunction을 구현을 안했다.
추후 TEST를 위해서 더 유지를 했다.


function onOpen(e) {
   SpreadsheetApp.getUi()
       .createMenu('My Menu')
       .addItem('My menu item', 'my1stFunction')
       .addSeparator()
       .addSubMenu(SpreadsheetApp.getUi().createMenu('My sub-menu')
           .addItem('One sub-menu item', 'mySecondFunction')
           .addItem('Another sub-menu item', 'myThirdFunction'))
       .addToUi();
}
 

function my1stFunction() {
  
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var ui = SpreadsheetApp.getUi();
    
  for (var i = 0; i < data.length; i++) {
   
    var msg = "Test Number:" + i + " /" + data.length + "\n\n";
    
    msg += data[0][2] + ":" + data[i][2] + "\n";
    msg += data[0][3] + ":" + data[i][3] + "\n\n";
    msg += data[0][4] + ":"+ data[i][4] + "\n";         
    
    var result = ui.alert(msg,ui.ButtonSet.OK_CANCEL);   
    
    if (result == ui.Button.CANCEL)
          break;        
  }    
}



실제로 적용 해보면, 어렵지 않으며, 약간의 시간이 있다면, 메뉴얼 읽는 시간과
소스 가지고 와서 붙히기 능력과 있으면 된다. ㅋㅋㅋ

메뉴를 바꾸고 싶다면 아래의 사이트에서 본인이 원하는 메뉴로 바꿔보고 테스트 해보자.
어렵지 않다.


4. Apps Script 관련사항  

프로젝트를 보면 다양한 기능을 제공을 하고 있으며, 프로젝트를 동시에 여러개를 운영이 가능하다.
아래는 간단히 기능만 소개한다.
  • 게시->배포기능  
  1. 웹앱 배포   : 크롬 웹 방식으로 하는 것 같음 
  2. API 실행가능으로 배포  :  Google API에 추가하는 식으로 하는 것 같음. 
  3. 스프레드 부가기능으로 배포:  다른 사람도 나의 Script을 사용가능한 것 같음.  
    API 배포방식하면, Gdrive 공유문서에, 배포된 API 연결하여 동작이 가능할 것 같다.
    그러면 HTML안에서 Javacript를 넣어 이를 다 Control이 가능할 것 같다.
    위 사항들은 어디까지나 개인적인 생각일뿐이다.
    아직 배포를 못해봤으며, Key 값이 없다.

    Key가 존재하면, 리소스->라이브러리 도 이용가능하고 다양하게 작성이 가능할 거 같다.
  • 프로젝트 기본정보확인 (파일->속성) 
     프로젝트 관련된 Script ID와 Key 정보가 있으며, 프로젝트 관련 정보가 있다.
     저번에 Google API를 사용하려고 Key를 얻을려고 했더니, $100까지만 무료이고,
     이후 유료인걸로 기억하고 있어, 추후 더 자세한 사항을 읽어봐야겠다.
     나중에 필요하다면 회사차원에서 해보겠다.


  • Google API 적용   
      프로젝트->리소스->고급 Google 서비스 

      다른 Google API를 이곳에서도 적용이 가능한 것 같다.
      이것을 하려면, Key값을 얻어야 할것 같다.
      위의 파일->속성에서 보면 자신이 Key를 가지고 있는지 확인 가능하다.


참고사항 
  • Dialogs Script 
   Dialog Box (alert , prompt box, custom box)
   https://developers.google.com/apps-script/guides/dialogs
   https://developers.google.com/apps-script/reference/base/button-set

  • Custom Menu 
   Google Apps에서 본인이 원하는 Menu를 만들수 있다
   https://developers.google.com/apps-script/guides/menus

  • Datasheet Apps Script Manual
   DataSheet에 관련된 Apps script
   https://developers.google.com/apps-script/reference/spreadsheet/sheet
   https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getUi()