Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌表单回复每月重置一次_Google Apps Script_Google Sheets_Google Forms - Fatal编程技术网

Google apps script 谷歌表单回复每月重置一次

Google apps script 谷歌表单回复每月重置一次,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我正在用谷歌电子表格创建一个谷歌表单。 每天,回复都会添加到表单中。 这些回答被添加到电子表格中 第一个响应占据电子表格中的第一行,第二个响应占据第二行,依此类推 当我删除表单响应和我以及其他人时,它会继续,就像电子表格的前一行被填写一样 例如,如果我有4个响应,那么最后一个响应将出现在电子表格的第4行。如果我清除响应并添加另一个,它将添加到第5行(而前4行为空) 这是一种在我清除新响应后重置其“索引”的方法吗 以下是我的谷歌应用程序脚本: var financeSheet = Spreads

我正在用谷歌电子表格创建一个谷歌表单。 每天,回复都会添加到表单中。 这些回答被添加到电子表格中

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

当我删除表单响应和我以及其他人时,它会继续,就像电子表格的前一行被填写一样

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

这是一种在我清除新响应后重置其“索引”的方法吗

以下是我的谷歌应用程序脚本:

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