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 开发人员的触发器的文章。
您必须设置可安装的触发器,为此,请按照以下步骤操作:
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) + ')'
);
}
}
文档
这些是我用来帮助你的文档:
我正在尝试提取所有 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 开发人员的触发器的文章。
您必须设置可安装的触发器,为此,请按照以下步骤操作:
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) + ')'
);
}
}
文档
这些是我用来帮助你的文档: