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