使用内置的电子表格功能于一身的脚本(Using built-in spreadsheet funct

2019-06-26 12:43发布

我使用谷歌应用程序脚本的第一次。 我使用它在谷歌文档电子表格。

我想很简单的功能,只是学习的基础知识。 例如,这工作:

function test_hello() {
    return 'hello';
}

但我不解这个简单的一个:

function test_today() {
    return today();
}

它使一个#ERROR! 无论我用它。 当我把我的光标放在它,它说:

error : ReferenceError: "today" is not defined.

虽然today()直接在电子表格中使用时功能工作。

这是否意味着,在脚本中,我不能使用电子表格内置函数? 有没有解决这个任何优雅的方式?

有些电子表格功能对我来说非常有用(我喜欢weekday()为例)。

非优雅的方式可能是创建列计算,我需要的中间值,并且可以与电子表格功能来计算。 但我宁愿避免这种东西脏和繁琐。

Answer 1:

谷歌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



Answer 2:

谷歌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)");

当心:这种技术公开在电子表格用户可以访问/改变细胞的代码,以及其他电子表格操作可能会覆盖这些细胞。



Answer 3:

谢谢哔叽。 我从您的文章理解的是,我不得不重新实现电子表格功能自己,不能直接再使用他们。

这只是一个愚蠢的“最简单的可能”的例子,来说明问题。 我想做的事,现在,是写工作日在信件的功能。

编辑:问题解决了!

什么是电子表格功能可以做,使用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';
};


文章来源: Using built-in spreadsheet functions in a script