메뉴 건너뛰기

app

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

lispro062015.05.25 11:35조회 수 2734댓글 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 조회 1696
lispro06
2015.05.15 조회 1666
lispro06
2015.05.15 조회 2559
lispro06
2014.08.16 조회 1803
lispro06
2014.02.08 조회 4082
lispro06
2013.12.11 조회 1731
lispro06
2013.12.10 조회 3036
suritam9
2013.12.06 조회 2314
suritam9
2013.12.02 조회 3500
suritam9
2013.11.30 조회 2197
suritam9
2013.11.26 조회 1702
suritam9
2013.08.23 조회 7372
suritam9
2013.08.23 조회 1903
suritam9
2013.06.28 조회 2391
첨부 (0)
위로