制作新工作表或更改工作表名称或复制工作表或从Google电子表格删除工作表时,如何通过Google应用脚本自动刷新工作表名称的当前列表
:::::::我需要工作表名称列表::::::::::::
::::::::::::::::::::::::::::::::::::::::
,工作表名称列表应显示在第二个工作表上,代码表达式为工作表[1]
下面的代码运行良好。但不能通过添加工作表或删除工作表来刷新
function sheetnames()
{
return SpreadsheetApp.getActiveSpreadsheet().getSheets().map(function(x) {return x.getName();});
}
答案 0 :(得分:3)
我相信您的情况和目标如下。
sheetnames()
函数用作Google Spreadsheet上的自定义函数。sheetnames()
的功能正常。为了达到上述目的,我想提出以下方法。
在这种情况下,用于刷新电子表格中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
。为了执行onChange
的功能,请在函数onChange
上安装OnChange事件触发器。您可以在this official document上看到安装此方法的方法。
例如,为了测试以上脚本,在安装功能onChange
作为可安装的OnChange事件触发器之后,请插入新的工作表。这样,您可以确认自定义功能sheetnames()
已刷新。