延續「Gg / 以Google sheets作為資料庫,透過Google Apps Script製作查詢頁面 修改版4 part1」
將取得更新工作表的程式碼加入流程之中
這個流程是修改自「JS / 以Google sheets作為資料庫,透過Google Apps Script製作查詢頁面 修改版1」
但是移除建立查詢頁面的程式碼,將相關程式碼移到CodePen
一方面可以測試,另一方面程式碼之後可以直接崁入其他網站,或者Google Site
整合的方式有2種
第1種簡單暴力, 先執行 getSheetInfo(),更新工作簿資料, 再執行searchData()搜尋並回傳資料
1 2 3 4 5 6 7 |
function doPost(e) { //Logger.log(e); //更新資料表 getSheetInfo(); //執行搜尋並回傳資料 return searchData(e); } |
僅searchData()修改#19-20,取得工作簿資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
function searchData(e) { //取得參數 var params = e.parameter; //console.log(e); //var params = e; var mailID = params.mailID; //console.log(mailID); var cID = params.cID; //console.log(cID); var arryC = cID.split(","); //console.log(arryC[0]); var dataAll = [];//用來存資料 for (var cc = 0; cc < arryC.length; cc++) { var sName = arryC[cc]; // 從彙整所有表單資料的工作簿取得資料 var ss = SpreadsheetApp.openById("*****************************************"); var Sheet = ss.getSheetByName(sName); var LastRow = Sheet.getLastRow(); var LastColumn = Sheet.getLastColumn(); var data = [];//用來存資料 //取得全部資料 var listAll = Sheet.getSheetValues(1, 1, LastRow, LastColumn); //console.log( listAll[0]); //存標題 var listA = []; for (var j = 0; j < listAll[0].length; j++) { listA.push(listAll[0][j]); } //console.log(listA); //[listAll[0][0],listAll[0][1],listAll[0][2],listAll[0][3],listAll[0][4]]; data.push({ dataload: listA }) //第1列是標題,序號由0開始,設定JSON格式{dataload: listAll[0]} //console.log(data); for (var i = 1; i < listAll.length; i++) { //第2列才是資料,序號由0開始 if (listAll[i][1] == mailID) { //電子信箱在第2欄,序號由0開始 var listOne = []; for (var k = 0; k < listAll[0].length; k++) { if (listAll[i][k].toString().search(/drive.google.com/i) > 0) { var rr = listAll[i][k].split(","); //console.log(rr[0]); //console.log(rr[1]); if (rr.length > 0) { var nHref = ""; for (var m = 0; m < rr.length; m++) { nHref += "<a href='" + rr[m].trim() + "' target='_blank'>" + rr[m].trim() + "</a> "; } //console.log("nHref"); //console.log(nHref); listAll[i][k] = nHref; } else { listAll[i][k] = "<a href='" + listAll[i][k] + "' target='_blank'>" + listAll[i][k] + "</a>"; } //console.log(listAll[i][k] ); listOne.push(listAll[i][k]); } else { listOne.push(listAll[i][k]); } } // [listAll[i][0], listAll[i][1], listAll[i][2], listAll[i][3],listAll[i][4]] data.push({ dataload: listOne }); //寫入資料 } } dataAll.push({ course: data }); } //顯示資料 // Logger.log(data); //Logger.log(dataAll); //將資料存成JSON格式並回傳 //結果不同 return ContentService.createTextOutput(JSON.stringify(dataAll)).setMimeType(ContentService.MimeType.JSON); //物件 } |
第2種先拆解搜尋頁面傳來的參數,再分別傳入getSheetInfo2()、searchData()
相較於第1種方式,第2種方式只會更新傳來的課程代碼的表單資料,不會更新所有表單資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function doPost(e) { Logger.log(e); var params = e.parameter; //console.log(e); //var params = e; var mailID = params.mailID;// //console.log(mailID); var cID = params.cID; //console.log(cID); //更新資料表 getSheetInfo2(cID); //執行搜尋並回傳資料 return searchData(mailID, cID); } |
getSheetInfo2(cID)
接收搜尋頁面傳來的課程代碼
#3
分割傳來的課程代碼
#5-10
取得對應的文件ID
利用createTextFinder()建立工作表的文字搜尋
搜尋課程代碼所在的列數,知道列數,就可以知道在B攔的文件ID
之後的程式碼沒有改變
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
function getSheetInfo2(e) { Logger.log(e); var arryC = e.split(","); for (var cc = 0; cc < arryC.length; cc++) { var ss = SpreadsheetApp.openById("**************************************"); var sName = arryC[cc]; var sh = ss.getSheets()[1]; var tf = sh.createTextFinder(sName); var i = tf.findNext().getRowIndex(); var sFileId = sh.getRange(i, 2).getValue(); Logger.log(sFileId); //取得最近一次的修改紀錄 var lastModi = listFileRevisions(sFileId); //console.log(lastModi); if (lastModi !== sh.getRange(i, 3).getValue()) { sh.getRange(i, 7).setValue(sh.getRange(i, 3).getValue()); sh.getRange(i, 3).setValue(lastModi); //delTable(sName); //getTable(sFileId,sName); sh.getRange(i, 10).setValue("lastModi !== sh.getRange(i, 3).getValue()"); } else { sh.getRange(i, 10).setValue("lastModi == sh.getRange(i, 3).getValue()"); } //取得最新的表單回應 var lastR = getSheetLastRow(sFileId) - 1; //取得表單回應 //console.log("lastR"); //console.log(lastR); //console.log("sh.getRange(i,4).getValue()"); //console.log(sh.getRange(i, 4).getValue()); //目前的紀錄 if (lastR != sh.getRange(i, 4).getValue()) { sh.getRange(i, 7).setValue(sh.getRange(i, 3).getValue()); sh.getRange(i, 8).setValue(sh.getRange(i, 4).getValue()); sh.getRange(i, 9).setValue(sh.getRange(i, 5).getValue()); sh.getRange(i, 4).setValue(lastR); sh.getRange(i, 5).setValue(Utilities.formatDate(new Date(), "GMT+8", "yyyy/MM/dd-hh:mm:ss")); sh.getRange(i, 6).setValue(""); delTable(sName); getTable(sFileId, sName); moveSheet(sName); } else { sh.getRange(i, 9).setValue(sh.getRange(i, 5).getValue()); sh.getRange(i, 5).setValue(Utilities.formatDate(new Date(), "GMT+8", "yyyy/MM/dd-hh:mm:ss")); sh.getRange(i, 6).setValue("相同"); } } } |
searchData(mailID, cID)
接收搜尋頁面傳來的電子郵件信箱跟課程代碼 ,其餘的程式碼沒有改變
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
function searchData(e1, e2) { //取得參數 var mailID = e1 var arryC = e2.split(","); //console.log(arryC[0]); var dataAll = [];//用來存資料 for (var cc = 0; cc < arryC.length; cc++) { var sName = arryC[cc]; // var ss = SpreadsheetApp.openById("**************************************"); var Sheet = ss.getSheetByName(sName); var LastRow = Sheet.getLastRow(); var LastColumn = Sheet.getLastColumn(); var data = [];//用來存資料 // 取得全部資料 var listAll = Sheet.getSheetValues(1, 1, LastRow, LastColumn); //console.log( listAll[0]); //存標題 var listA = []; for (var j = 0; j < listAll[0].length; j++) { listA.push(listAll[0][j]); } //console.log(listA); //[listAll[0][0],listAll[0][1],listAll[0][2],listAll[0][3],listAll[0][4]]; data.push({ dataload: listA }) //第1列是標題,序號由0開始,設定JSON格式{dataload: listAll[0]} //console.log(data); for (var i = 1; i < listAll.length; i++) { //第2列才是資料,序號由0開始 if (listAll[i][1] == mailID) { //電子信箱在第2欄,序號由0開始 var listOne = []; for (var k = 0; k < listAll[0].length; k++) { if (listAll[i][k].toString().search(/drive.google.com/i) > 0) { var rr = listAll[i][k].split(","); //console.log(rr[0]); //console.log(rr[1]); if (rr.length > 0) { var nHref = ""; for (var m = 0; m < rr.length; m++) { nHref += "<a href='" + rr[m].trim() + "' target='_blank'>" + rr[m].trim() + "</a> "; } //console.log("nHref"); //console.log(nHref); listAll[i][k] = nHref; } else { listAll[i][k] = "<a href='" + listAll[i][k] + "' target='_blank'>" + listAll[i][k] + "</a>"; } //console.log(listAll[i][k] ); listOne.push(listAll[i][k]); } else { listOne.push(listAll[i][k]); } } // [listAll[i][0], listAll[i][1], listAll[i][2], listAll[i][3],listAll[i][4]] data.push({ dataload: listOne }); //寫入資料 } } dataAll.push({ course: data }); } //顯示資料 // Logger.log(data); //Logger.log(dataAll); //將資料存成JSON格式並回傳 //結果不同 return ContentService.createTextOutput(JSON.stringify(dataAll)).setMimeType(ContentService.MimeType.JSON); //物件 } |