电子表格:“您无权调用setNumberFormat”

问题描述

我在Google电子表格上运行了以下脚本:

function FORMATCURRENCY(value,currency) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  
  var range = sheet.getRange("D19");
  
  range.setNumberFormat("$#,##0.00;$(#,##0.00)");
  
  return range 
}

但是,当我运行它时,我收到一条错误消息:“您无权运行setNumberFormat”。

我已经研究了this function here的文档,并按照所有说明进行了操作,包括在脚本区域中的作用域属性添加了授权依赖项,但是仍然遇到相同的错误

我的清单文件在脚本中看起来像这样:

{
  "timeZone": "Europe/London","dependencies": {
  },"exceptionLogging": "STACKDRIVER","runtimeVersion": "V8","oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/spreadsheets.currentonly","https://www.googleapis.com/auth/spreadsheets.readonly","https://www.googleapis.com/auth/userinfo.email"
  ]
}

这是什么问题?

解决方法

自定义功能不能与需要授权的服务一起使用。

在您的情况下,Set的所有setNumberFormat方法都属于此类别:

example

有关自定义功能,请参见official documentation

如果您的自定义函数抛出错误消息,您没有 允许调用X服务。该服务需要用户授权 因此无法在自定义函数中使用。

要使用除上面列出的服务以外的其他服务,请创建一个自定义菜单 运行Apps脚本功能而不是编写自定义 功能。从菜单触发的功能将询问用户 必要时进行授权,因此可以使用所有应用 脚本服务。

或者,您可以从脚本编辑器中运行该函数,但请记住,您需要传递参数才能执行它或在函数中定义它们。


在这种情况下,由于您没有在value函数中使用currencyFORMATCURRENCY,因此可以直接从脚本编辑器或从表单中的自定义菜单,但不是公式

function FORMATCURRENCY() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  
  var range = sheet.getRange("D19");

  range.setNumberFormat("$#,##0.00;$(#,##0.00)");
  
}