iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

從無到有打造驗證碼共享的 Line 機器人系列 第 5

利用 Google App Script 將資料存到 Google Sheet(2)

  • 分享至 

  • xImage
  •  

延續昨天的內容,今天我們要完成寫入&讀取的功能

將信件內容寫入到 Google Sheet

昨天成功與 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.

Insert To Sheet

那麼就依照教學寫一個簡單的 insertToSheet function 測試寫入功能吧
在 insertToSheet.gs 新增以下內容

  • 取得 sheet instance 的 A1:B1 儲存格範圍
  • test123 跟日期時間戳寫入 A1:B1 的 value
function 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 有簡單說明與範例如下:
A1 notation

接著將 insertToSheet.gs 修改成以下內容符合 app.gs 的流程

  • 接收兩個參數
    • sheet: 連結好的 sheet instance
    • content: 要寫入的信件內容
  • getLastRow() 取得該工作表有內容的最後一列Row number
  • getRange(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 加上欄位名稱方便閱讀
add column name in google sheet

Read From Sheet

成功將信件內容寫入後,當然也要一併做好讀取的功能
讀取的功能相對簡單很多~

在 readFromSheet.gs 新增以下內容

  • 一樣用 getLastRow() 取得最後一行有內容的列號
  • getSheetValues 取得指定儲存格範圍的內容,這裡只取有內容的最後一列的第一個儲存格的值
function readFromSheet(sheet) {
  Logger.log('start to readFromSheet');
  var lastRow = sheet.getLastRow();
  return sheet.getSheetValues(lastRow, 1, 1, 1);
}

完成 app.gs

接著修改 app.gs 如下

function app() {
  var content = readMail();
  var sheet = connectToSheet();
  insertToSheet(sheet, content);
  var validationCode = readFromSheet(sheet);
  Logger.log(validationCode);
}

按下執行查看結果:
app gs result

然後查看 Google Sheet 是否真的有被更新
google sheet result

測試多封驗證信的情況

再多發幾封假驗證信,測試 app.gs 每次執行是否都能抓到最後一筆的驗證碼

測試結果如下:
app gs result 02
google sheet result 02

以上,GAS 專案的建置暫時告一段落,部署跟排程之類的就等建好了 Line Bot 再繼續
明天就從 Line Bot 的建立開始吧!


上一篇
利用 Google App Script 將資料存到 Google Sheet(1)
下一篇
建立 Line Bot(1)
系列文
從無到有打造驗證碼共享的 Line 機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言