延續昨天的內容,今天我們要完成寫入&讀取的功能
昨天成功與 Google Sheet 建立連結了!
下一步就是研究該怎麼將內容寫入 Google Sheet 呢?
前面有提到,因為 Google Sheet 並非真正的資料庫,他其實是沒有 sql insert or query 的概念,但是我們還是能藉由 Google Sheet API 達到寫入指定的 cell or range 的功能
Fundamentals of Apps Script with Google Sheets #2: Spreadsheets, Sheets, and Ranges 文件中提到
What you'll learn
...
How to specify, activate, move, and sort a group of cells or range of data using the Range class.
那麼就依照教學寫一個簡單的 insertToSheet function 測試寫入功能吧
在 insertToSheet.gs 新增以下內容
A1:B1
儲存格範圍test123
跟日期時間戳寫入 A1:B1
的 valuefunction insertToSheet() {
Logger.log('start to insertToSheet');
var spreadSheet = SpreadsheetApp.openById('your_spread_sheet_id');
var sheet = spreadSheet.getSheetByName('your_sheet_name');
var range = sheet.getRange("A1:B1");
range.setValues([['test123', new Date()]]);
}
按下執行,確認是否有正常寫入到我們建立的 Google Sheet 中
p.s. 不知道 A1:B1
代表什麼的建議先閱讀 Google Sheets API Overview
文件裡的 A1 notation 有簡單說明與範例如下:
接著將 insertToSheet.gs 修改成以下內容符合 app.gs 的流程
getLastRow()
取得該工作表有內容的最後一列Row numbergetRange(startrow,startcolumn,numrows,numcolumns)
取得要寫入的儲存格範圍setValues
將內容寫入上述的儲存格範圍function insertToSheet(sheet, content) {
Logger.log('start to insertToSheet');
var lastRow = sheet.getLastRow();
var range = sheet.getRange(++lastRow, 1, 1, 2);
range.setValues([[content, new Date()]]);
}
然後將我們的 Google Sheet 加上欄位名稱方便閱讀
成功將信件內容寫入後,當然也要一併做好讀取的功能
讀取的功能相對簡單很多~
在 readFromSheet.gs 新增以下內容
getLastRow()
取得最後一行有內容的列號function readFromSheet(sheet) {
Logger.log('start to readFromSheet');
var lastRow = sheet.getLastRow();
return sheet.getSheetValues(lastRow, 1, 1, 1);
}
接著修改 app.gs 如下
function app() {
var content = readMail();
var sheet = connectToSheet();
insertToSheet(sheet, content);
var validationCode = readFromSheet(sheet);
Logger.log(validationCode);
}
按下執行查看結果:
然後查看 Google Sheet 是否真的有被更新
再多發幾封假驗證信,測試 app.gs 每次執行是否都能抓到最後一筆的驗證碼
測試結果如下:
以上,GAS 專案的建置暫時告一段落,部署跟排程之類的就等建好了 Line Bot 再繼續
明天就從 Line Bot 的建立開始吧!