Google 脚本运行但得到 'do not have permission to call setValues' 作为函数返回

Google Script runs but get 'do not have permission to call setValues' returned as function

在 google sheet 中,我试图将结果数组 return 转换为具有单个自定义函数的单元格数组。很像“=IMPORT...”或“=QUERY”本机函数。感谢用户 Bardy and this ,我开发了以下脚本。

function asset() {  
  var s = SpreadsheetApp.getActiveSpreadsheet()
  var ss = s.getActiveSheet()
  var sc = ss.getActiveCell()
  var items = [{Description:'Well',ItemId:'1'},
{Description:'House',ItemId:'2'}];

  var outputRows = []
  var headings = ["Description","ItemId"]

  items.forEach(function(item){
    outputRows.push(headings.map(function(heading){
      return item[heading] || '';
     }));
  });

  if (outputRows.length){
    outputRows.unshift(headings);
SpreadsheetApp.getActiveSheet().getRange(1,1,outputRows.length,outputRows[0].length).setValues(outputRows);
  }
}

当我 运行 它时,它就像一个魅力,但如果我尝试从价差 sheet 调用该函数,我会得到恶毒的

'ERROR:You do not have permission to call setValues (line 18).'

我浏览了博客并检查了几乎所有的帮助文件,但有些东西没有连接。我认为这与我尝试激活细胞的方式有关,但我错过了什么?

请注意,我知道类似的帖子 "No Permission to call setValues() - Google Apps Script, JSON data [duplicate]" (标记为 的重复项“无权在 Google Apps 脚本中调用 msgBox “) 但是我相信我的应用程序有点不同。我试图允许最终用户根据输入公式的位置将结果放在 sheet 中的任何位置。

我认为这与我尝试激活细胞的方式有关。我似乎无法弄清楚如何使它相对于输入公式的位置。我错过了什么?

当您从脚本编辑器 运行 函数时,您可以使用函数 .setValues() 。但是,当您将函数用作自定义函数时,您只能为具有自定义函数的单元格或其相邻单元格设置值。 Ruben 的 answer 总结了使用自定义函数时如何设置值。

与您的情况类似,您只是 return 数组而不是使用 setValues()。 像这样:

function asset() {  
  var s = SpreadsheetApp.getActiveSpreadsheet()
  var ss = s.getActiveSheet()
  var sc = ss.getActiveCell()
  var items = [{Description:'Well',ItemId:'1'},
{Description:'House',ItemId:'2'}];

  var outputRows = []
  var headings = ["Description","ItemId"]

  items.forEach(function(item){
    outputRows.push(headings.map(function(heading){
      return item[heading] || '';
     }));
  });

  if (outputRows.length){
    outputRows.unshift(headings);
    return outputRows
  }
}