메뉴 건너뛰기

app

[GAS] google script run withSuccessHandler, Data & Visualization Query

lispro062015.05.25 11:35조회 수 2036댓글 0

    • 글자 크기
js는 gs의 리턴값을 직접 받을 수 없기 때문에 SuccessHandler 라는 콜백함수를 사용해 받도록 되어있다.

https://developers.google.com/apps-script/guides/html/reference/run
위 경로를 참고하자.

구글 스프레드 시트를 html 형태로 query 하는 코드이다.
gs 부분은 js에서 gs 함수를 호출할 때, 리턴값을 내놓도록 되어 있다.

google.script.run.withSuccessHandler(cInfo).cnfo();
라고 하면, 성공했을 때, js의 cInfo 부분을 호출한다. 그러면 gs의 cnfo 함수의 리턴값을 받을 수 있다.

visulization query를 이용해 select 를 사용할 수 있다.
시트에서 select a, b, c 를 하게 되면, a, b, c 컬럼을 출력해 주는 테이블을 간단히 얻을 수 있고, data.getValue(i, j) 하면, 셀 값도 사용 가능하다.
select a, b, c where c="비교값" 하게 되면, c="비교값"인 결과를 아주 빠르게 얻을 수 있다.
물론 시트 읽기 권한이 있는 계정 또는 전체 공개가 되어 있는 문서에 한해 가능하다.

https://developers.google.com/chart/interactive/docs/queries

[gs]
function cnfo(){
  var rng = SpreadsheetApp.getActiveRange();
  var row = rng.getRow()-1;
  var values = SpreadsheetApp.getActiveSheet().getRange(row+1, 3, 1, 4).getValues();
  return(values[0][0]);
}

[js]
function cInfo(cn){
   qrSelect(cn);
}

function qrSelect(cu){
  if(cu==""){
   google.script.run.withSuccessHandler(cInfo).cnfo();
  }else{
    ~~~~~~~~~~~~~~~~~
  }
}

function qSelect(cu){
var sUrl = "시트경로";
var query = new google.visualization.Query(sUrl);
var q="SELECT A, B, D, E WHERE B='"+cu+"'";
    query.setQuery(q);
    query.send(qResponse);
}
function qResponse(response) {
if (response.isError()) {
    alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
    return;
}
    
      var data = response.getDataTable();
 var squdiv=document.getElementById("qu");
 var nor=data.getNumberOfRows();
 var t="";
 if(nor>1){
      t="<table>";
for(i=0;i<nor;i++){
t=t+"<tr><td><a href='#' onclick='qrSelect("+data.getValue(i, 0)+")'>"+data.getValue(i, 0)+"</a></td><td>"+data.getValue(i, 1)+"</td><td>"+data.getValue(i, 2)+"</td></tr>";
}
        t=t+"</table>";
  squdiv.innerHTML=t;
      }else{

      var table = new google.visualization.Table(document.getElementById('sms'));
      table.draw(data, {showRowNumber: true,cssClassNames: {headerRow:'columnTitle',tableCell:'columnTitle',tableRow:'columnTitle',selectedTableRow:'columnTitle',oddTableRow:'columnTitle',headerCell:'header-table',hoverTableRow:'columnTitle'}});
     }
}
lispro06 (비회원)
    • 글자 크기
[FreeBSD] 2006년 8월 24일 02:00 (by 박영식) [xcode] mapview 생성 후 현재 위치 지도 표시 (by 박영식)

댓글 달기

박영식
2010.09.09 조회 4588
lispro06
2015.11.20 조회 1454
lispro06
2016.10.27 조회 2493
박영식
2010.09.29 조회 4470
이전 1 2 3 4 5 6 7 8 9 10... 14다음
첨부 (0)
위로