使用电子表格的工作表名称填充行

Populate rows with the sheets names of an spreadsheet

我有一个传播sheet,其中包含多个 sheet 和一些食谱。我手动将 sheet 的标题存储在第一个 sheet 中,以引用另一个传播 sheet 上的食谱标题,但这不能很好地扩展,所以我想自动化过程。我相信我不能用任何内置函数来做到这一点,所以我正在尝试构建一个自定义函数来做到这一点。

我已经知道一些编码,但是我在 google API 方面的经验非常有限。我当前的尝试返回以下异常:“您无权调用设置值”。在 google 这个错误之后,我发现自定义函数似乎无法为另一个单元格设置值,所以我来这里是为了寻找一种替代这种微不足道的行为的方法。

这是我当前的代码:

function updateSheetTitles() {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var cell = SpreadsheetApp.getActiveSpreadsheet().getCurrentCell();
  var row = cell.getRow();
  var column = cell.getColumn();
  for (var i=0 ; i<sheets.length ; i++){
    if(i<1) //For passing trought the first sheet
      return;
    cell.setValue(sheets[i].getSheetName);
    var range = SpreadsheetApp.getActiveSheet().getRange(row+1, column, 1, 1);
    cell = SpreadsheetApp.getActiveSheet().setCurrentCell(range);
  }
}

这里有一张图片来说明我想要什么:

这可能是一项简单的任务,但我未能找到构建它的方法,所以任何实现它的想法都将不胜感激。

我相信你的目标如下。

  • 您想在活动 Google Spreadsheet.
  • 中检索 sheet 个名字
  • 您想将 sheet 个名称放入活动单元格。
  • 您想使用自定义函数实现此目的。

修改点:

  • 很遗憾,setValue不能在自定义函数中使用。我认为你的问题的原因是由于这个。
  • 在您的脚本中,cell.setValue(sheets[i].getSheetName);getSheetName 的方法不是 运行。如果您想使用此方法,请添加 () like getSheetName().
  • SpreadsheetApp.getActiveSpreadsheet()可申报1次

为了实现您的目标,我想提出一个自定义函数来创建一个包含 sheet 名称的数组并返回该数组。

以上几点反映到示例脚本中,就变成了下面的样子。

修改后的脚本:

请将以下脚本复制并粘贴到Google Spreadsheet的脚本编辑器中。并且,请将 =updateSheetTitles() 的自定义函数放在一个单元格中。至此,sheet个名字返回到行方向。

function updateSheetTitles() {
  return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(e => [e.getSheetName()]);
}
  • 从你的回复来看,当你想检索除第一个和第二个sheet之外的sheet个名字时,你也可以使用下面的脚本。

      function updateSheetTitles() {
        return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(e => [e.getSheetName()]).slice(2);
      }
    

参考文献: