我在将正则表达式插入用于工作表/表单的超简单Google脚本时遇到麻烦。我已经检查了regex101.com之类的网站,以确保我的语法与regex本身无关,我只是想不出如何将其插入 Google脚本中。
我正在做的是尝试重命名通过链接表单生成的“表单响应”表单。我希望它能捕获任何响应表,所以我希望给它一个通配符(而不是“表单响应1”)(如果有比使用正则表达式更好的方法,那么我会全力以赴)。如果我将“ Form Responses 1”硬编码为字符串,则脚本可以正常工作,因此对于其余的代码,我不需要任何故障排除,只需这一行:
ss.getSheetByName('Form Responses 1').setName('Entries');
我已经尝试了/ Form Responses。* /和/ ^ Form Responses /,以及一些我在new RegExp()
中使用变量的建议,但是每次尝试都会导致错误,字段为null
。
任何建议将不胜感激,谢谢!
答案 0 :(得分:1)
您只能将字符串传递给getSheetByName
。您需要做的是(也许在确认甚至有通过Spreadsheet#getFormUrl()
提交到电子表格的表单之后)是查询所有Sheet
的值getFormUrl()
:>
/**
* @param {Spreadsheet} wb
* @returns {Sheet[]} A possibly-empty array of sheets that have associated forms.
*/
function getAllFormResponseSheets(wb) {
if (!wb) wb = SpreadsheetApp.getActive();
return wb.getSheets().filter(function (sheet) { return sheet.getFormUrl(); });
}
由于没有表单的工作表将返回null
,并且null
在JavaScript中是虚假的,因此Array
响应中将只包含提交表单的工作表。 / p>
然后您将使用此数组执行任何操作:
function foo() {
const other = SpreadsheetApp.openById("....");
const formSheets = getAllFormResponseSheets(other);
formSheets.forEach(function (sheet) {
Logger.log("My name is '%s' and I am index %s.", sheet.getName(), sheet.getIndex());
// do more stuff with each sheet
});
}
参考文献: