那进入到第二天的,今天我们先来了解基本 Google Apps Script 的设定方式!
进到 Google Apps Script 的官方网站後,直接点击 start scripting
到任意的 Google Workspace ,透过工具 > 指令编辑器来进入有绑定的 GAS 专案。
这两个方式的差异在於,在於前者本身并未绑定任何 Google 产品,而後者通常都是会有个绑定的表单、投影片或文件,所以有些功能使用上会有一点点差异。像是在还没包装成 Add-On 时,两者在抓要让 GAS 读特定 Google Sheet 时,方式 2 可以透过 getactivespreadsheet()
抓出「有绑定使用的表单」,方式 1 则须透过完整指定 ID 来抓到档案。
通常开发时,我习惯透过 方式2
,可以省掉一些设定的时间。
总共有五个部分,包括总览(Overview)、编辑器(Editor)、触发条件(Trigger)、执行项目(Execution)和专案设定(Setting),其中比较重要的 「触发条件」 和 「执行项目」,我们之後开发时主要会看到这两个。
通常打开一个新专案并进入编辑器,会看到一个预设的 程序码.gs
,档案类型 .gs
是 GAS 的档案结构,在下一个段落会详细说明。在这边,为了方便待会的说明,我们直接在 程序码.gs
中写一段简单的 Code。
以下这段是我透过进入方式2
绑定一个功能表後,用 SpreadsheetApp
叫出能控制 Google Sheet 的 Object API,再透过 getActiveSpreadsheet()
跟它说给我现在有「绑定的表单」,也就是我影片中左边那份,并用 toast
丢出一个小告示说「Hello World!」,我们透过按下「执行」来让这段程序码运行。
function hello() {
SpreadsheetApp.getActiveSpreadsheet().toast("Hello World!");
}
结构 1 我们展示了顺利执行的话会长怎麽样,但如果我们想知道,执行背後的 console,或执行失败的原因呢?这个时候就可以透过我们的 执行项目 来看到。
执行项目中,会显示出所有你所有按下「执行」的历史。包括是...
hello
「持续时间」记得没有额外付费的话,执行有个扣打不能超过六分钟,可以参考第一篇文章。
点击每个执行项目,都会显示其过程中的 console,如果是错误会显示错误原因。如果想要看到成功的执行过程,则可以透过 Logger.log()
来印出过程中的物件、变数等,在下面第四点会详细说明。
在 GAS 中,我们可以设定「何时要启动这函式」,常见的有「每次有人开启表单/档案」时启动,「每天早上8点刷一次」,「跟着特定行事历,到 9/1 凌晨 12 点时」帮我开一下。
实际上怎麽设定呢?一样,我们打开绑定好表单的 GAS,并先完成想排定时间的程序码(像这边是 hello),并选择三种驱动方式。
要注意的是,如果是在後台直接执行、运用打包後的选单或按钮,抑或是在 Google Sheet 中已「公式」的形式使用,其触发的 GAS 程序会在执行项目中列出,但不会列在触发条件当中。
基本上 GAS 上你可以用这几个档案:.html
、.css
、.js
和 .gs
,且要注意是很纯的 css,像是 .scss
和 .sass
以及其他如 .php
、.py
等目前是仍无法读取。而其中比较特殊的档案是 .gs
在写 GAS 时有个特别的档案类型,供 GAS 运行使用。
要注意的是,这边指的是单纯 GAS 接受的档案类型。如果你是有一个已经完成的 GAS 服务,想要串接 API,则可以透过 Google Worksapce REST API 来完成,其支援大部分的後端语言,包括 Go、Java、NodeJS、Python、Ruby 与 PHP,也支援 Android 和 IOS 要串接手机的 Code 也没问题。
想要开发 GAS ,可以直接用最开始的叙述直接进入 Apps Script 的平台,以类似 Cloud IDE 的方式开发与测试。至於要本地开发的话,则通常会使用 clasp
这项工具(Github: clasp)。这系列文章定位给入门者,大部分人可能没有熟悉的 IDE 与特定语言。也因为我们只开发简单功能,这系列我们会以每个人都能使用的「线上开发」做为主要的讲解方式。
在任何 GAS 专案的最一开始,当你按下第一次「执行」时,有个比较麻烦的步骤要按下「允许授权」,且要按下接受「不安全」的按键才会让你继续使用。
在 GAS 中,我们主要有两种 debug 的方式。第一种是透过 Logger.log
,类似 JS 中的 console.log()
,另一种则是用期线上开发的云端 debug 工具,会告诉你跑到这一行有哪些变数(跟线下的 IDE 很像)。
功能完成後,接着则按 插入 > 插图,然後对做出来的图案(任意图案)按下右键,有一个指派程序码(Assign),再打上 function 的纯名字(输入 hello
而不是 hello()
)就可以完成设定了!
取消的话,一样是对按钮按右键,则可以将指派的程序码删除。
在这边,我们先坐两个简单的功能,分别是「显示出 Hello」和「显示出 Hi」。
function hello() {
SpreadsheetApp.getActiveSpreadsheet().toast("Hello World!");
}
function hi() {
SpreadsheetApp.getActiveSpreadsheet().toast("Hi!");
}
然後我们再用 onOpen()
这个後台的触发条件,意思是每当开启表单时,就执行这段程序码。接着再透过 SpreadsheetApp.getUi()
呼叫 UI,并透过 createMenu
、addSubMenu
和 addItem
做出另外一个选单画面。 特别提一下 addItem
的做法是... addItem( 表单上显示的项目名称, 实际在 .gs 档案中的程序名称)
。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('客制化工具列')
.addSubMenu(ui.createMenu('打招呼')
.addItem('Say Hi', 'hi')
.addItem('Say Hello', 'hello'))
.addToUi();
}
最後完成就会像这样子!
这两个打包之後用完整的两篇来介绍给大家。
而实际使用上,会建议用 打包2
,原因是用 打包1
的按钮功能很阳春,按下去时并不会知道自己已经点到了,有时会误触很多下。
在开发 GAS 时,你会发现「时区设定」很重要,因为会想知道是几点出 bug 的,以及排程的触发条件是不是跟着自己的时区。那要怎麽调整呢?基本上是「绑定的试算表」(或其他产品) > 档案 > 试算表设定 > 时区 来做更改)
这是第二天,把开发初期要注意的是尽力写上来,主要透过影片的方式,希望能帮助大家时间,希望有所帮助!也欢迎留言跟我说想看到什麽样的题目喔!
<<: Day 1:Native vs. Not-so-native
>>: Day 2-什麽是单元测试及何谓优秀的单元测试? (基础-1)
在安装完Shioaji套件之後,我们就可以开始使用api的功能了。 第一步当然是要登入我们的帐户啦,...
runBlocking 中文用户如我们? 直译一下就是,跑一个塞住 恩,三小? 他真正的意思是,执行...
连续30天的铁人赛终於要完结啦! 这次参赛主题"Elastic Stack(ELK)数据图...
第二天的课程对於没有写过网页的我有一点难度,主要是网页的架构不像数据直线的思考,整个架构颇立体的, ...
中间件 - Middleware 嗨大家好,因为在部署 Elastic Beanstalk 上遇到了...