我使用谷歌应用程序脚本的第一次。 我使用它在谷歌文档电子表格。
我想很简单的功能,只是学习的基础知识。 例如,这工作:
function test_hello() {
return 'hello';
}
但我不解这个简单的一个:
function test_today() {
return today();
}
它使一个#ERROR!
无论我用它。 当我把我的光标放在它,它说:
error : ReferenceError: "today" is not defined.
虽然today()
直接在电子表格中使用时功能工作。
这是否意味着,在脚本中,我不能使用电子表格内置函数? 有没有解决这个任何优雅的方式?
有些电子表格功能对我来说非常有用(我喜欢weekday()
为例)。
非优雅的方式可能是创建列计算,我需要的中间值,并且可以与电子表格功能来计算。 但我宁愿避免这种东西脏和繁琐。
谷歌Apps Script是JavaScript的一个子集,电子表格功能目前不支持。 例如,如果你想创建一个返回今天的你应该写日期的函数:
function test_today(){
return new Date()
}// note that this will eventually return a value in milliseconds , you'll have to set the cell format to 'date' or 'time' or both ;-)
语法是一样的与片材的功能: =test_today()
见教程
网上有很多ressources在JavaScript中,我发现最有用的一个是w3school
谷歌Apps脚本仍然不(19年2月7日),包括谷歌,以本土表功能的API。
但是可以设置在电子表格中的单元格,命名为在片材中的命名范围的式(本地函数)。
然后在GAS:
var formulaOutput = spreadsheet.getNamedRange("outputCell").getValue();
瞧! 你的气正在调用该小区的原生功能。
可以从气体中的细胞,通过在片材命名另一小区(或者在任何片材)通过在其他小区中的公式称为数据发送到本机函数:
spreadsheet.getNamedRange("inputCell").setValue(inputData);
你的气可以动态创建这些细胞,而不是硬编码他们,例如:
spreadsheet.setNamedRange("inputCell", spreadsheet.getRange("GASGS!A1"));
spreadsheet.setNamedRange("outputCell", spreadsheet.getRange("GASGS!A2"));
spreadsheet.getNamedRange("inputCell").setFormula("=WEEKNUM(inputCell)");
当心:这种技术公开在电子表格用户可以访问/改变细胞的代码,以及其他电子表格操作可能会覆盖这些细胞。
谢谢哔叽。 我从您的文章理解的是,我不得不重新实现电子表格功能自己,不能直接再使用他们。
这只是一个愚蠢的“最简单的可能”的例子,来说明问题。 我想做的事,现在,是写工作日在信件的功能。
编辑:问题解决了!
什么是电子表格功能可以做,使用Javascript可以做。 我只需要更换var day_num = weekday()
由var day_num = new Date(date).getDay()
下面是结果:
/**
* Writes the day of the week (Monday, Tuesday, etc), based on a date
*/
function day_name(date) {
// calculate day number (between 1 and 7)
var day_num = new Date(date).getDay();
// return the corresponding day name
switch(day_num) {
case 0: return 'Sunday'; break;
case 1: return 'Monday'; break;
case 2: return 'Tuesday'; break;
case 3: return 'Wednesday'; break;
case 4: return 'Thursday'; break;
case 5: return 'Friday'; break;
case 6: return 'Saturday'; break;
}
return 'DEFECT - not a valid day number';
};