如何从 google 应用程序脚本 google 传播 sheet 自定义单元格函数 [自定义函数刷新]

How to get auto refresh google spread sheet custom cell fuction from google app script [ custom fuction refresh ]

如何在创建新的 sheet 或更改 sheet 名称或复制 sheet 时通过 google 应用程序脚本自动刷新 sheet 名称的当前列表]s 或从 google 传播中删除 sheets sheet

:::::: 我需要 sheet 姓名的列表 ::::::::::::

  1. 有很多sheet个
  2. 新的sheet将由其他用户添加
  3. 新 sheet 的名称将被其他用户更改
  4. 一些 sheet 将被其他用户删除
  5. 我需要现有的 sheet 不超过
  6. 的名单

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

sheet 名称列表应显示在第二个 sheet 代码表达式为 sheet[1]

以下代码运行良好。但它不会通过添加 sheets 或删除 sheets

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

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

  • 您正在使用 sheetnames() 的函数作为 Google Spreadsheet 上的自定义函数。
  • 您已经确认sheetnames()的功能有效。
  • 您想在 sheet 被删除、插入、复制和 sheet 名称更改时刷新自定义函数。

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

用法:

1。准备脚本。

本例中Spreadsheet中刷新自定义函数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事件触发器后,例如,请插入新的sheet。由此,您可以确认自定义函数sheetnames()已刷新。

参考文献: