Google 每月重置表单回复

Google Form Responses Reset every month

我正在创建一个由 google 电子表格支持的 google 表单。 每天都会将回复添加到表单中。 这些回复已添加到电子表格中。

第一个响应占据电子表格中的第一行,第二个响应占据第二行,依此类推。

当我删除表单回复以及我和其他回复时,它会继续,就像电子表格的前一行已填写一样。

例如,如果我有 4 个回复,最后一个将在电子表格的第 4 行。如果我清除响应并添加另一个响应,它将添加到第 5 行(而前 4 行为空)。

是否可以在我清除新回复后为新回复重置 "index"?

这是我的 Google 应用程序脚本:

 var financeSheet = SpreadsheetApp.openById(_spreadsheetId);
 var financeForm = FormApp.openById(_formId);
 var expencesSheet = financeSheet.getSheetByName(_sheet);

 // Clean the form and the responses
 financeForm.deleteAllResponses();
 expencesSheet.getRange(2, 1, 100, 5).clear();

这是由于脚本只是 "clearing" 来自行的所有数据 clear() 方法调用。如果要确保从 Spreadsheet 结构中删除该行,请使用 deleteRow()deleteRows() 方法。

P.s。尽管 getLastRow() 可能会让您相信如果您使用它测试行数,但文档明确指出它只计算 内容为 的行,因此跳过由 clear().

澄清

也许我的回答不够清楚为什么您应该使用 SpreadsheetApp 而不是 FormApp。这里的问题是,当您调用 clear() 方法时,您 保留了 Sheet 中的行数 并且 Forms 总是将响应提交给 最后一行之后的下一行 不管是否包含数据(这就是为什么"it continues like if the previous line of the Spreadsheet were filled" - 有占位符行 其中没有任何数据)。

测试

您可以通过 运行 这个函数(getMaxRows() 方法 returns 每一行,不管其内容如何)自己看到差异:

function getNumRows() {

  var ss = SpreadsheetApp.getActive();
  var sh = ss.getActiveSheet();

  var initial = sh.getMaxRows();
  Logger.log('Initial number of rows: '+initial);

  sh.appendRow(['test']);

  var plusOne = sh.getRange(sh.getMaxRows(), 1, 1, sh.getLastColumn());
  plusOne.clear();

  var cleared = sh.getMaxRows();
  Logger.log('Number of rows after clearing: '+cleared);

  sh.deleteRow(sh.getMaxRows());

  var deleted = sh.getMaxRows();
  Logger.log('Number of rows after deletion: '+deleted);

}

所见即所得

如果您仍然不相信我,这是我创建并测试您的案例的示例 - 如您所见,结果因使用 deleteRow() 方法或 clear() 和与是否重置表单无关(我根本不调用 deleteAllResponses() 方法)。

有用链接

  1. deleteRow() reference;
  2. getLastRow() reference;
  3. getMaxRows() reference;
  4. clear() reference;