动态单元格位置;无权调用 setValues

Dynamic cell position; No permission to call setValues

所以我有一张通过 IFTTT 跟踪我的工作时间的表格,我想在我的 Sheet 中添加一个脚本,以便在我的工作周结束时可以调用它并将 "End Work Week!" 全部在不同的列中,但在同一行中......但是为了使 IFTTT 代码正常工作,我需要在其下方有一个空白行,所以我一直在放置“=”“”。这是自定义函数:

function myRows(w, x, y, z) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //Logger.log(x);
  //Logger.log(y);
  var range = sheet.getRange(w, x, y - w + 1, z - x + 1);
  var rangeSetUp = [["Begin", "Work", "Week", "!"], ["=F1",  " ", " ", " "]];
  range = range.getA1Notation(); //Say the range is 1,1,2,4 then this will return a string "A1:D2", which seems to work better on getRange...
  range = sheet.getRange(range);
  range.setValues(rangeSetUp);
}

并且在单元格中我会有 =myRows(ROW(), COLUMN(), (ROW() + 1), (COLUMN() + 3)) 而且我不向它发送静态值,因为代码将被放置在不同的单元格中......值的 "Array" 应该始终是 4列宽和 2 行深....不管它放在哪里,这就是为什么 var rangeSetUp 是静态的。我可以让代码完全执行到 setValues 然后我得到

#ERROR! You do not have permission to call setValues (line 11).

欢迎任何帮助。我是 Sheet 的所有者。

一个自定义函数 cannot use .setValues()。引用文档:

A custom function cannot affect cells other than those it returns a value to. In other words, a custom function cannot edit arbitrary cells, only the cells it is called from and their adjacent cells. To edit arbitrary cells, use a custom menu to run a function instead.

要将值写入相邻的单元格,只需 return 一个值数组,它会自动填充相邻的值。有关详细信息,请参阅 documentation

在您的具体情况下,您只需执行以下操作:

function myRows() 
{
  var rangeSetUp = [["Begin", "Work", "Week", "!"], ["=F1",  " ", " ", " "]];
  return rangeSetUp
}

因此,如果您的单元格 A3 是“=myRows()”,您的输出会如此