在工作簿中找到任何表单响应表

时间:2018-07-23 16:22:35

标签: google-apps-script google-sheets

我在将正则表达式插入用于工作表/表单的超简单Google脚本时遇到麻烦。我已经检查了regex101.com之类的网站,以确保我的语法与regex本身无关,我只是想不出如何将其插入 Google脚本中。

我正在做的是尝试重命名通过链接表单生成的“表单响应”表单。我希望它能捕获任何响应表,所以我希望给它一个通配符(而不是“表单响应1”)(如果有比使用正则表达式更好的方法,那么我会全力以赴)。如果我将“ Form Responses 1”硬编码为字符串,则脚本可以正常工作,因此对于其余的代码,我不需要任何故障排除,只需这一行:

ss.getSheetByName('Form Responses 1').setName('Entries');

我已经尝试了/ Form Responses。* /和/ ^ Form Responses /,以及一些我在new RegExp()中使用变量的建议,但是每次尝试都会导致错误,字段为null

任何建议将不胜感激,谢谢!

1 个答案:

答案 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
  });
}

参考文献: