Google 工作表脚本自动将所有工作表的列表添加(和更新)到一个范围内?

Google Sheets Script to automatically add (and update) a list of all sheets into a range?

我正在尝试提取所有 sheet 的列表,并在工作簿中发生更改时更新此列表。

在我的 google sheet 中,我使用以下函数将所有 sheet 放入列表中:

=SHEETNAME()

使用下面的脚本,我的目标是在更改事件时更新它:

    function sheetName(e) {
      return SpreadsheetApp.getActive()
        .getSheets()
        .map(function(sheet) {
          return sheet.getName();
        });
    }

    /*Create a installable trigger to listen to grid changes on the sheet*/
    function onChange(e) {
      if (!/GRID/.test(e.changeType)) return; //Listen only to grid change
      SpreadsheetApp.getActive()
        .createTextFinder('=SHEETNAME\([^)]*\)')
        .matchFormulaText(true)
        .matchCase(false)
        .useRegularExpression(true)
        .replaceAllWith(
          '=SHEETNAME(' + (Math.floor(Math.random() * 500) + 1) + ')'
        );
    }

已设置以下触发器 - 它也会在更改时运行:

但不幸的是,该列表不会自动更新。

非常感谢任何帮助!

您的函数名称需要是 onEdit(e)。请参阅这篇关于 Google 开发人员的触发器的文章。

https://developers.google.com/apps-script/guides/triggers

您必须设置可安装的触发器,为此,请按照以下步骤操作:

1) 转到您的 Apps 脚本项目

2) 点击编辑->当前项目的触发器

3) 点击“+添加触发器”

4) Select :

  • 选择哪个函数运行 -> 函数名称

  • Select 事件源-> 来自电子表格

  • Select 事件类型 -> 变化时

现在,我稍微修改了您的 onChange 函数,否则,您将进入无限循环

function sheetName(e) {
  return SpreadsheetApp.getActive()
    .getSheets()
    .map(function(sheet) {
      return sheet.getName();
    });
}

/*Create a installable trigger to listen to grid changes on the sheet*/
function onChange(e) {
  Logger.log(e.changeType)
  if (/GRID/.test(e.changeType)){
    SpreadsheetApp.getActive()
    .createTextFinder('=SHEETNAME\([^)]*\)')
    .matchFormulaText(true)
    .matchCase(false)
    .useRegularExpression(true)
    .replaceAllWith(
      '=SHEETNAME(' + (Math.floor(Math.random() * 500) + 1) + ')'
    );
  }
}

文档

这些是我用来帮助你的文档: