利用 Google App Script 将资料存到 Google Sheet(2)

延续昨天的内容,今天我们要完成写入&读取的功能

将信件内容写入到 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 的建立开始吧!


<<:  Day 5 ( 入门 ) 指北针

>>:  Day 5 图片去背 ( 魔术棒 )

Day20 霓虹灯文字

霓虹灯文字 教学原文参考:霓虹灯文字 这篇文章会介绍在 GIMP 里使用选取、选取边框、填色、文字、...

GCP loadbalanc(二)

GCP loadbalance (HTTP(S)) HTTP(S)负载平衡是一种全球性的基於代理的第...

Day 06:专案01 - 超简单个人履历05 | CSS版面布局、Flex

昨天讲完的CSS的文字和区块属性後,今天要接续介绍版面布局的属性,以及一个非常好用的布局容器 - F...

Day 07 : Squares of a Sorted Array

题目简述: 一个由小到大排列的整数阵列,写一个函式回传每个元素的平方,并且也是由小到大排列 Inpu...

Day 8 ( 入门 ) 晃动计步器

晃动计步器 教学原文参考:晃动计步器 这篇文章会介绍如何使用「晃动」、「显示数字」、「变数」、「按钮...