메뉴 건너뛰기

app

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

lispro062015.05.25 11:35조회 수 2722댓글 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 조회 1676
lispro06
2015.05.15 조회 1650
lispro06
2015.05.15 조회 2541
lispro06
2014.08.16 조회 1793
lispro06
2014.02.08 조회 4053
lispro06
2013.12.11 조회 1712
lispro06
2013.12.10 조회 3015
suritam9
2013.12.06 조회 2295
suritam9
2013.12.02 조회 3483
suritam9
2013.11.30 조회 2188
suritam9
2013.11.26 조회 1684
suritam9
2013.08.23 조회 7348
suritam9
2013.08.23 조회 1891
suritam9
2013.06.28 조회 2368
첨부 (0)
위로