Google 的在线应用允许用户通过脚本(Google Apps Script)对其增加功能,以 Google 表格为例,可以增加菜单加入一些本来没有的功能,也可以增加没有的公式完成更复杂的运算,如果会 JavaScript,很容易就会上手了。
管理脚本
添加 Apps 脚本
打开或新建一个表格,通过菜单“扩展程序-Apps 脚本”进入项目编辑器。
默认项目名称“未命名项目”,建立了一个.gs
后缀名的脚本文件,并且写了一个myFunction
函数。
运行和调试
在函数内加一行代码并保存,点击运行结果如下。这里的运行是指运行下拉菜单中选中的某个函数。
和表格交互
添加菜单
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('我的菜单')
.addItem('你好', 'hello_')
.addToUi();
}
function hello_(){
Browser.msgBox('你好');
}
onOpen
是一个内部函数,在表格打开的时候会自动触发执行。hello_
函数名后加下划线表示这个函数只能在脚本内部通过其他函数来调用。
保存后运行,表格页面即会出现菜单。
添加自定义公式
脚本内满足条件的函数都可以当做公式使用,例如增加一个获取当前日期的函数,在表格中直接使用=dateNow()
即可,每次重新打开表格都会更新为当天的日期。
function dateNow(){
return new Date().toISOString().slice(0, 10);
}
获取当前选择的单元格值
function getCurrentValue(){
let current = SpreadsheetApp.getCurrentCell().getValue();
console.log(current);
}
因为函数后没加下划线,所以可以直接在下拉菜单里选择后执行。
选一个有内容的单元格,然后执行结果如下,根据单元格的格式,getValue()
会返回不同的类型数据。
遍历选中的多个单元格值
function getSelectionValues(){
let activeSheet = SpreadsheetApp.getActiveSheet();
let ranges = activeSheet.getSelection().getActiveRangeList().getRanges();
ranges.forEach(function(range){
let numRows = range.getNumRows();
let numColumns = range.getNumColumns();
for (let r = 1; r <= numRows; r++) {
for (let c = 1; c <= numColumns; c++) {
let cellValue = range.getCell(r, c).getValue()
console.log(cellValue);
}
}
});
}
注意
- 第一次运行会出现授权提示;
- 关闭表格后项目编辑器会自动关闭;
- 修改代码后需要保存重新运行才生效;
- 脚本代码和表格关联,下一次打开仍然存在,可直接分享给其他人;
- 分享后的新的用户第一次使用菜单等也会出现授权提示。