【问题标题】:Call to insertSheet works in Google Script Editor and was authorised but dosent work when calling from the spreadsheet调用 insertSheet 在 Google 脚本编辑器中有效,并且在从电子表格调用时已获得授权但无效
【发布时间】:2017-09-03 18:25:35
【问题描述】:

我编写了一个自定义函数,它调用下面的代码来创建一个临时工作表。当我在 Google 编辑器中运行它时,我被要求授权并授予访问权限。

我的自定义函数在 Google 编辑器中运行良好,但在电子表格中不起作用,并且我收到错误消息“您没有调用 insertSheet 的权限”。

我创建了电子表格和自定义函数,因此我拥有(有权访问)所有内容。

  var tempSheetName = "temp";
  var sp = SpreadsheetApp.getActiveSpreadsheet();
  var activeCell = sp.getActiveCell();
  sp.insertSheet(tempSheetName);

【问题讨论】:

  • 如何在电子表格中调用它?
  • 我使用自定义函数名称“=getSlopeSMA()”调用它,其中包含创建临时工作表的代码。

标签: google-apps-script google-sheets


【解决方案1】:

来自 Google Apps 指南:Link

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

【讨论】:

  • 我认为电子表格服务是允许的。错误与函数有关。
【解决方案2】:

您可能有自己的理由,为什么要以这种方式完成它。但我真的不确定单元格中的自定义函数是否是创建新选项卡的正确位置。您通常在单元格内进行计算,而不是文档操作。

如果你要为这样的函数创建一个菜单项并从那里调用它呢?

function onOpen() {

  // instantiate UI object
  var ui = SpreadsheetApp.getUi();

  // create the menu
  ui.createMenu("Functions")
  .addItem("Create Sheet", "createSheet")
  .addToUi();
}

function createSheet() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheetName = 'mySheet',
      sheet = ss.getSheetByName(sheetName);

  // delete sheet if it already exists
  if (sheet) ss.deleteSheet(sheet);

  // insert sheet
  ss.insertSheet(sheetName, 0);
}

您仍然收到错误消息吗?只是好奇...

【讨论】:

  • 他想将它与“自定义函数”一起使用,如内置函数“=IF”、“=COUNT”......,在单元格中声明它
  • 我将工作表用作放置数据和执行计算的临时空间。我需要在工作表中执行此操作,因为我无法在 Google 应用程序脚本中访问常规工作表函数(例如 arrayfunction()、Googlefinance()、...)。
  • 我可以使用您的代码和菜单再试一次。对你起作用吗?您的代码似乎正在使用 insertSheet。我的函数在计算后返回一个数值,因此我希望它位于单元格而不是菜单中,但如果这是我可能使用解决方法的唯一方法。
  • 无法在脚本中使用自定义函数,也无法从自定义函数创建选项卡。那么你真的应该尝试一下自定义菜单。
猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多