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

昨天我们利用 GAS 读取了筛选邮件的内容
今天我们要进一步将资料存到 Google Sheet 以供 Line Messaging Api 读取

写在前头

筛选邮件的内容其实可以优化到限制只获取 Netflix 验证码相关的信件中的验证码
但因为这牵涉到 Netflix 验证码信件的格式,所以这边就不多做示范
接下来的内容一律先用假资料验证信去完成,信件内容如下:
fake validation mail

步骤

因为目标是将之前建置的 GAS 专案可以读取指定的信件内容,并且将验证码存到 Google Sheet 中,这可以拆解成以下几个功能:

  1. readMail
  2. connectToSheet
  3. insertToSheet
  4. readFromSheet

修改专案架构

首先将 GAS 专案架构修改如下图,这样才不会所有程序码都挤在一起变超长
project layout
入口点为 app.gs

先前完成的 readMail.gs 的内容修改如下

function readMail() {
  Logger.log('start to readMail');
  var firstThread = GmailApp.search('subject:(Validation Code Test)', 0, 1)[0];
  var messages = firstThread.getMessages();
  var lastMessageIndex = firstThread.getMessageCount() - 1;
  if (lastMessageIndex < 0) {
    throw Error;
  }
  var content = messages[lastMessageIndex].getPlainBody();
  return content.trim();
}

使用 Google Sheet API

跟串接 Gmail 服务一样,要使用 Google Sheet 首先要新增 Google Sheet Api 的服务
add google sheet api

文件

一样可以找到支援文件:
Google Sheet Api 文件

比较特别的是,Google 有一系列的文件教你如何将 sheet 扩充使用,甚至是结合他们提供的其他 GCP 服务
Extending Google Sheets

其中与本次专案比较相关的文件有:
Fundamentals of Apps Script with Google Sheets #2: Spreadsheets, Sheets, and Ranges

题外话,如果想了解更多 GAS 的基础使用跟范例,可以阅读以下教学系列文章
Codelabs: Apps Script Fundamentals

If you're new to Apps Script, you can learn the basics using our Fundamentals of Apps Script with Google Sheets codelab playlist.

新增一个 Google Sheet

那麽,首先就是要建立一个新的 Google Sheet 让我们存放资料

有资料库概念的人,可以把 Google Sheet 想像成 Database,而里面每张 Sheet 等同於 Table
如此一来就可以规划我们的存放资料的栏位

注意:毕竟 Google Sheet 不是真的资料库,也许他可以应付轻量存取或简单的用途,但不要期望他能做到跟真正的资料库一样

建立完的 Google Sheet 如下
google sheet image

接着打开共用,选择知道连结的人都能编辑

GAS 专案连结 Google Sheet

根据教学文件提到,连结中间的那串就是你的 spreadsheet id,并且我们可以使用 openById 去连接到这张表

在 connectToSheet.gs 中新增以下的内容

function connectToSheet() {
  Logger.log('start to connectToSheet');
  var spreadSheet = SpreadsheetApp.openById('your_spread_sheet_id');
  var sheet = spreadSheet.getSheetByName('your_sheet_name');
  Logger.log(sheet.getName());
}

按下执行,确认结果是否可以正确读到该张工作表的 name
p.s. 过程中可能会出现审查权限的要求

接着将 connectToSheet.gs 修改如下,让 app.gs 执行时可以拿到连接好的 sheet instance

function connectToSheet() {
  Logger.log('start to connectToSheet');
  var spreadSheet = SpreadsheetApp.openById('your_spread_sheet_id');
  var sheet = spreadSheet.getSheetByName('your_sheet_name');
  if (sheet != null) {
    return sheet;
  }
  throw Error;
}

这样就成功让 GAS 专案能连接到 Google Sheet 读取相关资讯
明天再继续完成写入&读取 Google Sheet 的功能


<<:  运算与表达

>>:  D3: [漫画]工程师太师了-第2话

Day3-DotCloud? Docker?

问世间Docker为何物,直教DotCloud以死相许,所以Docker到底是虾毁?不仅让当时云端巨...

使用者帐号在Mendix要怎麽管理?

铁人赛来到第29天了! 既然应用程序都开发得差不多了,是时候来给Admin更多的权限了! 创建帐号连...

下拉式选单更新 Day 23

今天使用 "下拉式更新"作为主题 下拉式更新被创造以来,广受欢迎 所以今天要介绍...

个人管理 - 技术提升

试想,24岁研究所毕业,就算是25岁投入职场,到了30岁,那个时候的自己是怎麽样的自己? 前面提到,...

[Day 11 - JS] 互动吧网页 — Javascipt的DOM 操作 / 事件

在前一篇,我们介绍完 Javascript 的语法和基本功能,包括宣告变数、条件陈述式、函式、物件阵...