Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 自定义函数抛出一个";您没有设置“值”所需的权限;错误_Google Apps Script_Google Sheets_Permissions_Authorization_Google Sheets Custom Function - Fatal编程技术网

Google apps script 自定义函数抛出一个";您没有设置“值”所需的权限;错误

Google apps script 自定义函数抛出一个";您没有设置“值”所需的权限;错误,google-apps-script,google-sheets,permissions,authorization,google-sheets-custom-function,Google Apps Script,Google Sheets,Permissions,Authorization,Google Sheets Custom Function,我正在尝试为Google电子表格中的单元格设置一些值: function exampleFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var range1 = sheet.getRange("A1"); var value1 = range1.getValue(); value1+=1;

我正在尝试为Google电子表格中的单元格设置一些值:

    function exampleFunction() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheets()[0];
      var range1 = sheet.getRange("A1");
      var value1 = range1.getValue();
      value1+=1;
      range1.setValue(2);
      return value1;
    }
如果我试图使用此函数影响单元格,则会出现以下错误:

您没有设置值所需的权限。(第10行,文件“ddd”)


你知道我怎样才能做到吗?实际上,我希望受影响的单元格获取单元格A1的值,并将A1的值增加1。

来自文档:

自定义函数返回值,但不能在其所在单元格之外设置值。在大多数情况下,单元格A1中的自定义函数无法修改单元格A5。但是,如果自定义函数返回双数组,则结果将溢出包含该函数的单元格,并填充包含自定义函数的单元格右下方的单元格。您可以使用包含return[[1,2]、[3,4]];的自定义函数来测试这一点


参考:

看起来您正在使用上述函数作为自定义函数,换句话说,它在Google Sheets UI上按单元格公式调用,方式如下:

=exampleFunction()
有一些限制,比如它们不能用来调用需要权限的谷歌应用脚本服务。解决方法是使用另一种方法调用函数:

  • 从谷歌应用程序脚本编辑器运行它
  • 使用
  • 使用

此外,它们也可以从调用,并且通过使用自定义函数,如上所述,自定义函数具有权限限制。它们可以使用自定义菜单运行,也可以插入图像并为其指定自定义脚本,使其像按钮一样使用

使用a是完成类似本例的任务的另一种方法,这使其自动化

应用程序脚本中的一个简单触发器,例如
onSelectionChange(e)
可以在不遇到将自定义函数放入单元格的权限问题的情况下工作。此触发器比原始帖子中提供的触发器更新。在下面的简单示例中,单元格A1将变为带偶数整数的白色,其他任何单元格都变为红色。当然,触发火灾的速度可能会有所不同。它并不总是像人们期望的那样瞬间发生

function onSelectionChange(e) {

  const sheet = SpreadsheetApp.getActive()
  var value1 = sheet.getRange("A1").getValue()
    if(value1 % 2 == 0) {
        sheet.getRange("A1").setBackground("#FFFFFF") //white
    } else {
        sheet.getRange("A1").setBackground("#FF0000") //red
    }
}

最后我找到了设置公式的方法…
这与我们程序员的想法有点不同。
您可以在宏中使用SetFormula,但不能在自定义函数中使用。
只需从
Tools->Macros->Record macro
创建一个简单的宏,然后打开脚本编辑器并将宏的代码更改为您的代码…
以下是我的宏代码:

function SetFormula() {
  var spreadsheet = SpreadsheetApp.getActive();
  var formulaValue = spreadsheet.getRange('formulaText').getValue().toString();
  spreadsheet.getRange('total').setFormula(formulaValue);
  return formulaValue;
};
然后,为了自动运行宏(您可以从
Tools->Macros->your-macro-NAME
手动运行),只需创建一个触发器,如下所示:

  • 打开脚本编辑器:

  • 然后从左侧面板转到触发器,点击添加触发器按钮:

  • 最后,创建触发器,从列表中选择您的宏(我的是SetFormula),从电子表格中选择事件源作为,并在编辑时选择事件类型等于,然后保存它。

  • 就这样
    注意:为了更灵活,我将我的范围命名为
    FormulaText
    total

    您可以从这里执行此操作:

    什么是“range1.setValue(2);”该怎么办?您是要将1添加到A1并将we结果放在其他位置,还是要通过将1添加到A1来更改单元格A1?您是否使用自定义函数来调用它,即单元格中的=exampleFunction()?不明白。我同意迈克尔的观点,不清楚。。。我在回答中假设此函数用作自定义函数,因为在将其作为自定义函数进行测试时收到的错误消息正好是“您没有调用setValue()的权限…”另外:问题是:“受影响的单元格”我猜这意味着“我将此函数放在其中的单元格”?这是否回答了您的问题?那么,那么.setValue()方法的用途是什么?这是没有意义的。自定义函数只是gasSo的一个小用例。除了在脚本中,你还可以在哪里使用来自Google脚本的函数?我没有说“脚本”,我说的是在电子表格单元格中使用的自定义函数。请阅读文档的第一页:脚本的类型。@ SergEnsas——你能考虑更新你的答案来参考正文中最新版本的文档吗?此问答目前正在讨论中,将被引用为该问题的规范(可能将您的最后评论移至答案)-谢谢!