【问题标题】:Google Form Responses Reset every month每月重置 Google 表单回复
【发布时间】:2019-06-08 22:32:18
【问题描述】:

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

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

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

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

是否可以在我清除新回复后重置它们的“索引”?

这是我的 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();

【问题讨论】:

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


    【解决方案1】:

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

    附:虽然getLastRow() 可能会让你相信如果你用它测试行数,文档清楚地指出它只计算有内容的行,因此跳过了clear() 清空的那些。 p>

    澄清

    也许我的回答不够清楚,为什么您应该使用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() 而不同,与表单是否被重置(我根本不调用deleteAllResponses() 方法)。

    有用的链接

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

    【讨论】:

    • 我的问题可能不清楚,我的问题与FormApp有关。 SpreadSheepApp 的行为符合预期。包含表单响应的工作表被清理。但实际的问题是,当添加新的响应时,它被插入到工作表中的错误位置。
    • @Benoit,不,我确实正确理解了您的问题。请修改您的代码并亲自查看 - 像您描述的那样添加新响应的原因在于 clear() 的用法,与 FormApp 本身无关。我什至创建了一个示例表单来测试它。如果您尝试了建议的内容但仍然遇到问题,我提前道歉!表单中没有使其发布到特定行的“索引”(每个响应仅添加 +1 行),并且使用 deleteAllResponses() 成功重置
    • 谢谢!没看懂deleteRows的效果,效果很好,效果比我想象的要好,我没有空行,需要的时候表单会自动创建行!
    • 一点也不!清除数据后,行实际上保留在原位并不明显。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多