메뉴 건너뛰기

app

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

lispro062015.05.25 11:35조회 수 2680댓글 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 (비회원)
    • 글자 크기
[네이버맵] 오픈 api 네이버 지도 모바일 터치 (by lispro06) [SWIFT] table view didSelectRowAtIndexPath (by lispro06)

댓글 달기

lispro06
2015.05.15 조회 1632
lispro06
2015.05.15 조회 1600
lispro06
2015.05.15 조회 2492
lispro06
2014.08.16 조회 1739
lispro06
2014.02.08 조회 3979
lispro06
2013.12.11 조회 1648
lispro06
2013.12.10 조회 2953
suritam9
2013.12.06 조회 2249
suritam9
2013.12.02 조회 3424
suritam9
2013.11.30 조회 2139
suritam9
2013.11.26 조회 1626
suritam9
2013.08.23 조회 7292
suritam9
2013.08.23 조회 1826
suritam9
2013.06.28 조회 2313
첨부 (0)
위로