【问题标题】:How to reset Google Form counter values using google apps script如何使用谷歌应用脚​​本重置谷歌表单计数器值
【发布时间】:2013-02-22 09:05:16
【问题描述】:

我有几个经常重复使用的 Google 表单,每次提交大约 300 - 400 个表单。

到目前为止,我有两种手动重置表单的方法:

  1. 在保持表单编辑器打开的同时删除表单。
  2. 选择包含表单提交的行,右键单击并选择“删除...行”。

使用脚本,我没有找到像form.reset() 这样的方法。 .DeleteRows(fromRow, to Row) 方法只是删除行,不影响计数器。

那么,如何使用 Google Apps 脚本自动执行“重置表单”任务?
或者,如何在脚本中模仿第二种方式?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    Google 表单创建了一个新的表单编辑器(几周前刚刚发布)。这个新的表单编辑器有一个“删除所有回复”选项。因此,一种选择是在新的表单编辑器中重新创建表单。 (在新的电子表格中,点击工具 > 创建表单)。

    注意:Google Apps 用户尚无法使用此新表单编辑器。

    【讨论】:

    • 感谢您的回复 :) 因为我将输入工作表与其他工作表链接在一起,其中包含很多公式。重新创建表单或将其链接到另一个工作表会使公式中断。这是我考虑脚本选项的原因之一。
    • @Phil - 新的 Forms 产品不仅仅是一个新的编辑器 - 变化比这更深。电子表格中显示的响应是现在存储在表单服务中的源数据的副本,而在旧表单中,ss 是唯一的存储。如果您从表格中“查看回复”,则报告来自表格 - 表格中的更改/更正被排除在外。同样,“删除所有回复”操作会警告“不会删除已发送到电子表格的回复”。因此,要清除表单响应和工作表现在需要两个操作。
    • ...目前没有表单API,但是it's been requested
    【解决方案2】:

    我有一个使用deleteRows() 的有效解决方案。我不确定为什么这对你不起作用,看看你的代码会很有趣。

    新的表单产品(2013 年 2 月)与旧表单完全不同 - 此解决方案仅适用于旧表单

    无论如何,这就是我所拥有的,前后截图。 tidy() 函数可以通过传入要删除的行数来调用,或者您可以从菜单中调用它,如此处所示。此脚本的更完整版本是available as a gist

    /**
     * Standard onOpen provided in script template.
     */
    function onOpen() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var entries = [{name : "Read Data",functionName : "readRows"},
                     {name : "Tidy Form Responses", functionName : "tidy"}];
      sheet.addMenu("Script Center Menu", entries);
    };
    
    /**
     * Prompt user for the number of form response rows to remove, then delete them.
     * Assumes that the form responses are in the active sheet, that there is one
     * row of 'headers' followed by responses (in row 2).
     *
     * @param {number} thisMany (Optional) The number of rows to remove. If not
     *                          specified, user will be prompted for input.
     */
    function tidy(thisMany) {
      if (tidy.arguments.length == 0) {
        thisMany = Browser.inputBox("How many responses should be tidied?");
      }
    
      var sheet = SpreadsheetApp.getActiveSheet();
      sheet.deleteRows(2, thisMany);
    }
    

    之前

    期间

    之后

    【讨论】:

    • 这适用于旧表格,你是对的,但新表格似乎不再是这种情况,计数器不再出现在电子表格中并删除“添加的灰色” rows' 没有效果(至少在我的测试中)......无论如何,我认为问题是关于遗留表单的,所以现在已经超出了主题。 +1 对于这个清晰的演示 :-) - 注意:您可以通过提供删除最后一个答案的能力来改进它,而不仅仅是第一个答案(甚至更好:通过选择起始编号的任何答案)
    • 谢谢,@Serge。我把一个更完整的版本放在一个要点中——它可以删除所有行。虽然我可以(或任何想要它的人)对从哪里开始删除更有选择性,但我假设最旧的响应是最可消耗的。至于新表单,由于表单的响应部分而不是电子表格,这将不起作用。可以添加到the existing API request
    • 感谢@Mogsdad,我已经尝试了您的代码并对其进行了一些调整,它不仅可以删除行,还可以更新表单计数器://resetInput var shInput = ss.getSheetByName('Input'); LastInput = shInput.getLastRow(); ss.toast('LastInput in row: '+LastInput); //Confirm the last row shInput.deleteRows(2, LastInput-1);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多