如何从Google应用脚本获取自动刷新Google电子表格自定义单元格功能[自定义功能刷新]

时间:2020-07-09 04:03:53

标签: google-apps-script google-sheets google-sheets-custom-function

制作新工作表或更改工作表名称或复制工作表或从Google电子表格删除工作表时,如何通过Google应用脚本自动刷新工作表名称的当前列表

:::::::我需要工作表名称列表::::::::::::

  1. 有很多床单
  2. 新表格将由其他用户添加
  3. 其他用户将更改新工作表的名称
  4. 某些工作表将被其他用户删除
  5. 我需要现有的工作表名称列表不过去

::::::::::::::::::::::::::::::::::::::::

,工作表名称列表应显示在第二个工作表上,代码表达式为工作表[1]

下面的代码运行良好。但不能通过添加工作表或删除工作表来刷新

function sheetnames()
{
 return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(function(x) {return x.getName();});
}

1 个答案:

答案 0 :(得分:3)

我相信您的情况和目标如下。

  • 您正在将sheetnames()函数用作Google Spreadsheet上的自定义函数。
  • 您已经确认sheetnames()的功能正常。
  • 您要在删除,插入,复制工作表并更改工作表名称时刷新自定义功能。

为了达到上述目的,我想提出以下方法。

用法:

1。准备脚本。

在这种情况下,用于刷新电子表格中sheetnames()的自定义功能的示例脚本由OnChange事件触发器运行。为此,请将以下示例脚本复制并粘贴到Spreadsheet的容器​​绑定脚本中,然后保存该脚本。

function onChange(e) {
  var lock = LockService.getDocumentLock();
  if (lock.tryLock(10000)) {
    try {
      const prop = PropertiesService.getScriptProperties();
      if ((e.changeType === "OTHER" || e.changeType === "REMOVE_GRID" || e.changeType === "INSERT_GRID") && !prop.getProperty("run")) {
        const formula = "=sheetnames";  // <--- Please set the function name of the custom function.
        const ss = e.source;
        const tempFormula = "=sampleFormula";
        ss.createTextFinder("^\\" + formula).matchFormulaText(true).useRegularExpression(true).replaceAllWith(tempFormula);
        ss.createTextFinder("^\\" + tempFormula).matchFormulaText(true).useRegularExpression(true).replaceAllWith(formula);
        prop.setProperty("run", "done");
      } else {
        prop.deleteProperty("run");
      }
    } catch(e) {
      throw new Error(e);
    } finally {
      lock.releaseLock();
    }
  }
}
  • 为了避免脚本的重复运行,使用了LockService
  • 为了避免触发器的无限循环,请使用PropertiesService

2。安装OnChange事件触发器。

为了执行onChange的功能,请在函数onChange上安装OnChange事件触发器。您可以在this official document上看到安装此方法的方法。

3。测试

例如,为了测试以上脚本,在安装功能onChange作为可安装的OnChange事件触发器之后,请插入新的工作表。这样,您可以确认自定义功能sheetnames()已刷新。

参考文献: