Google apps script 谷歌表单回复每月重置一次
我正在用谷歌电子表格创建一个谷歌表单。 每天,回复都会添加到表单中。 这些回答被添加到电子表格中 第一个响应占据电子表格中的第一行,第二个响应占据第二行,依此类推 当我删除表单响应和我以及其他人时,它会继续,就像电子表格的前一行被填写一样 例如,如果我有4个响应,那么最后一个响应将出现在电子表格的第4行。如果我清除响应并添加另一个,它将添加到第5行(而前4行为空) 这是一种在我清除新响应后重置其“索引”的方法吗 以下是我的谷歌应用程序脚本:Google apps script 谷歌表单回复每月重置一次,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我正在用谷歌电子表格创建一个谷歌表单。 每天,回复都会添加到表单中。 这些回答被添加到电子表格中 第一个响应占据电子表格中的第一行,第二个响应占据第二行,依此类推 当我删除表单响应和我以及其他人时,它会继续,就像电子表格的前一行被填写一样 例如,如果我有4个响应,那么最后一个响应将出现在电子表格的第4行。如果我清除响应并添加另一个,它将添加到第5行(而前4行为空) 这是一种在我清除新响应后重置其“索引”的方法吗 以下是我的谷歌应用程序脚本: var financeSheet = Spreads
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();
这是因为脚本使用
clear()
method调用简单地“清除”了行中的所有数据。如果要确保从电子表格结构中删除该行,请使用deleteRow()
或deleteRows()
方法
注意:如果您使用它测试行数,虽然getLastRow()
可能会让您相信不是这样,但文档清楚地表明,它只计算包含内容的行,因此跳过了clear()
清空的行
澄清
也许我的答案不太清楚,为什么你应该使用SpreadsheetApp
而不是FormApp
。这里的问题是,当您调用clear()
方法时,您保留了工作表中的行数,表单总是将响应提交到最后一行之后的下一行,而不管它是否包含数据(这就是为什么“它会继续,就像电子表格的前一行被填充一样”-有占位符行(左行中没有数据)
测试
通过运行此函数(getMaxRows()
method返回每一行,而不考虑其内容),您可以自己看到差异:
所见即所得
如果您仍然不相信我的话,这是我创建并测试您案例的示例—正如您所看到的,结果因使用deleteRow()
方法或clear()
而不同,与是否重置表单无关(我根本不调用deleteAllResponses()
方法)
有用的链接
deleteRow()
李>
getLastRow()
李>
getMaxRows()
李>
clear()
李>
我的问题可能不清楚,我的问题与FormApp有关。PAPP的行为符合预期。包含表单响应的工作表将被清除。但实际的问题是,当添加新的回答时,它被插入到工作表中的错误位置。@Benoit,不,我确实正确理解了你的问题。请修改您的代码并亲自查看-添加新响应的原因在于clear()
用法,与FormApp
本身无关。我甚至创建了一个示例表单来测试它。如果您尝试了建议的内容,但仍然遇到问题,我提前向您道歉!表单中没有“索引”可以将其发布到特定行(每个响应只需添加+1行),并且可以使用deleteAllResponses()
成功重置它,谢谢!我不理解deleteRows的效果,它很有效,结果比我想象的要好,我没有空行,表单会在需要时自动创建行!一点也不!在清除了行中的数据后,行是否实际保留在适当的位置并不明显。很高兴我能帮忙!
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);
}