最近有網友問到,原來的成績查詢只能顯示一筆查到的紀錄,如果要顯示多筆呢?
原先的想法是,在Server端把資料查詢好,透過組成前端HTML字串輸出的方式來達成
結果,超乎意料,他真的被當成文字輸出而不是Bind到原來的HTML Table當中
應該是原有Template在evaluate時,原有的HTML Elements會先輸出到前端,然後再從Server
下載字串輸出,這部分就沒有重建HTML DOM了
查了一下 Google App Script Document 有一個範例可以套用 Calling Apps Script functions from a template,可以直接將 Spreadsheet的內容 Dump出來變成前端的 Data Source.
於是將程式稍微修改一下,原先查詢介面,新增一個 Checkbox 來判斷前端的查詢,以判斷走不同的路徑
在 程式碼.gs 的 doPost 加入一個參數的判斷,如果前端勾選 isShowAll,就改抓 qryResult2.html來顯示
qryResult2.html則將原本 qryResult.html 中
就可以做成 Data Dump了。
如果是要做條件篩選輸出多筆,該怎麼做?
可以改寫 qryScoresAll() 把篩選的資料,以陣列的方式輸出,這邊就不再說明 :)
測試網址:
https://script.google.com/macros/s/AKfycbz4QFQDkgaLGlEFnF10pvRXxKyp_kP9dpdDQkeKZpM/dev
原先的想法是,在Server端把資料查詢好,透過組成前端HTML字串輸出的方式來達成
結果,超乎意料,他真的被當成文字輸出而不是Bind到原來的HTML Table當中
應該是原有Template在evaluate時,原有的HTML Elements會先輸出到前端,然後再從Server
下載字串輸出,這部分就沒有重建HTML DOM了
查了一下 Google App Script Document 有一個範例可以套用 Calling Apps Script functions from a template,可以直接將 Spreadsheet的內容 Dump出來變成前端的 Data Source.
於是將程式稍微修改一下,原先查詢介面,新增一個 Checkbox 來判斷前端的查詢,以判斷走不同的路徑
在 程式碼.gs 的 doPost 加入一個參數的判斷,如果前端勾選 isShowAll,就改抓 qryResult2.html來顯示
function doPost(e){
var id=e.parameter.id;
var authCode=e.parameter.authCode;
var isShowAll=e.parameter.isShowAll;
if (isShowAll){
var tmpl = HtmlService.createTemplateFromFile('qryResult2');
return tmpl.evaluate();
} else {
return qryScores(id,authCode);
}
}
qryResult2.html則將原本 qryResult.html 中
這一大段程式碼,改用迴圈的方式來Dump資料
這邊可以看到,使用 data 去承接 Server 端 qryScoresAll() 所回傳的Data (陣列型態)
所以透過 for-loop 將 Data 在前端組成 HTML Code 輸出
function qryScoresAll() {
var iRow=3;
var sheetApp = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1lIUUdZximIlLNM6UXjCAeKeqYJTHtIXBFq9iLEuap1c/edit#gid=0');
var OutputRecord="";
var sheetScore = sheetApp.getSheetByName('學期成績');
return sheetScore.getDataRange().getValues();
}
就可以做成 Data Dump了。
如果是要做條件篩選輸出多筆,該怎麼做?
可以改寫 qryScoresAll() 把篩選的資料,以陣列的方式輸出,這邊就不再說明 :)
測試網址:
https://script.google.com/macros/s/AKfycbz4QFQDkgaLGlEFnF10pvRXxKyp_kP9dpdDQkeKZpM/dev