我正在创建一个以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();
答案 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()
方法)。
有用的链接