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'}});
}
}
댓글 달기