메뉴 건너뛰기

app

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

lispro062015.05.25 11:35조회 수 2683댓글 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 조회 1636
lispro06
2015.05.15 조회 1604
lispro06
2015.05.15 조회 2500
lispro06
2014.08.16 조회 1745
lispro06
2014.02.08 조회 3992
lispro06
2013.12.11 조회 1652
lispro06
2013.12.10 조회 2963
suritam9
2013.12.06 조회 2254
suritam9
2013.12.02 조회 3438
suritam9
2013.11.30 조회 2142
suritam9
2013.11.26 조회 1628
suritam9
2013.08.23 조회 7294
suritam9
2013.08.23 조회 1829
suritam9
2013.06.28 조회 2319
첨부 (0)
위로