通过 Google 表格脚本可以方便的为表格增加默认没有的公式。
使用公式
上一篇 Google 表格脚本简介 里提到了脚本里的函数可以在表格的公式里直接调用,例如可以自定义一个 DOUBLE 函数,当输入公式=DOUBLE(A1)
将 A1 的值乘以二倍后返回。
function DOUBLE(input) {
return input * 2;
}
输入值处理
我们知道公式是可以传入单个单元格(例如 A1)或者单元格区域(例如 A1:A2)的,使用自定义公式时系统先会自动处理传入的值,然后再作为参数传给函数。
例如公式=DOUBLE(A1)
传入的值就是1
,公式=DOUBLE(A1:B1)
,传入的值会是一个二维数组[[1,3]]
,公式=DOUBLE(A1:B2)
传入[[1,3],[2,'']]
。
所以需要在根据公式的用途在函数里添加处理数组的方法。
function DOUBLE(input) {
if (input.map) {
return input.map(DOUBLE);
} else {
return input * 2;
}
}
自动提示功能
自定义公式也支持自动提示功能,需要在函数前添加相关注释。
/**
* 将数字乘以 2
*
* @param {number|Array>} 单元格或单元格范围
* @return 乘以 2
* @customfunction
*/
function DOUBLE(input) {
console.log(input);
if (input.map) {
return input.map(DOUBLE);
} else {
return input * 2;
}
}
注意
- 自定义公式名称不能何内置公式冲突,不能以
_
结尾; - 虽然公式不区分大小写,但是脚本里的函数是区分大小写的;
- 公式里使用的函数必须在 30 秒内返回值,否则返回错误;
- 公式里每使用一次函数都会去请求服务器,如果大量使用返回结果会很慢,所以应该尽量直接传入单元格区域,而不是每一个单元格单独调用函数。例如本文的 DOUBLE 函数,如果要求一列数值的二倍,应该直接使用一次
=DOUBLE(A1:A100)
,而不是=DOUBLE(A1)
、=DOUBLE(A2)
……