Google表单回复每月重置

时间:2019-06-08 22:32:18

标签: google-apps-script google-sheets google-form

我正在创建一个以Google Spreadsheet为后盾的Google表单。 每天,回复都会添加到表单中。 这些回复将添加到电子表格中。

第一个响应采用电子表格的第一行,第二个响应采用秒行,依此类推。

当我删除表单响应时,我和其他人都将其删除,就像填充电子表格的前一行一样。

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

清除新响应后,是否可以为新响应重置“索引”?

这是我的Google App脚本:

 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();

1 个答案:

答案 0 :(得分:1)

这是由于脚本仅使用clear()方法调用从行中“清除”了所有数据。如果要确保从Spreadsheet结构中删除该行,请使用deleteRow()deleteRows()方法。

P.s。尽管getLastRow()可能会让您相信,如果您用它测试了行数,但是文档清楚地指出,它只计算包含内容的,因此跳过了{{1}清空的行}。

说明

也许我的答案还不够清楚,为什么你应该写clear()而不是SpreadsheetApp。这里的问题是,当您调用FormApp方法时,您保留工作表中的行数,并且表单始终将响应提交给最后一行之后的下一行 不管是否包含数据(这就是为什么“它会像填充电子表格的前一行一样继续”的原因-剩下占位符行而没有数据)。

测试

通过运行此函数,您可以自己看到区别(clear()方法返回每一行,而不管其内容如何):

getMaxRows()

所见即所得

如果您仍然不相信我,这是我创建并测试您的案例的示例-如您所见,结果取决于使用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()方法)。

enter image description here

有用的链接

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