Google apps script 如何使用谷歌应用程序脚本重置谷歌表单计数器值
我有几个谷歌表单,它们经常被重复使用,每次提交大约300-400个表单 到目前为止,我有两种手动重置表单的方法:Google apps script 如何使用谷歌应用程序脚本重置谷歌表单计数器值,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我有几个谷歌表单,它们经常被重复使用,每次提交大约300-400个表单 到目前为止,我有两种手动重置表单的方法: 在保持表单编辑器打开的同时删除表单。 选择包含表单提交的行,右键单击并选择“删除…行” 对于脚本,我很难找到像form.reset()这样的方法。 方法.DeleteRows(fromRow,to Row)只删除行,但不影响计数器 那么,如何使用Google apps脚本自动执行“重置表单”任务呢?或者,如何在脚本中模拟第二种方式 谢谢大家! 谷歌表单创建了一个新的表单编辑器(几周前
form.reset()
这样的方法。
方法.DeleteRows(fromRow,to Row)
只删除行,但不影响计数器
那么,如何使用Google apps脚本自动执行“重置表单”任务呢?或者,如何在脚本中模拟第二种方式
谢谢大家! 谷歌表单创建了一个新的表单编辑器(几周前发布)。这个新的表单编辑器有一个“删除所有响应”的选项,因此一个选项是在新的表单编辑器中重新创建表单。(从新电子表格中,单击工具>创建表格)
注意:谷歌应用程序用户还不能使用这个新的表单编辑器。我有一个可行的解决方案,它使用
deleteRows()
。我不知道为什么这对你不起作用,看看你的代码会很有趣
新表单产品(2013年2月)与旧表单大不相同-此解决方案仅适用于旧表单
不管怎样,这里是我所拥有的,包括前后截图。可以通过传入要删除的行数来调用tidy()
函数,也可以从此处演示的菜单中调用该函数。此脚本的更完整版本为
之前
在期间
之后
谢谢您的回复:)因为我将输入表与其他表链接,这是相当多的公式。重新创建表单或将其链接到其他工作表将导致公式中断。这就是我考虑脚本选项的原因之一。@Phil-新表单提供的不仅仅是一个新的编辑器-变化更深刻。电子表格中显示的响应是现在存储在表单服务中的源数据的副本,而在旧表单中,ss是唯一的存储。如果您从工作表中“查看回复”,则报告来自表格-不包括工作表中的更改/更正。同样,“删除所有响应”操作警告“已发送到电子表格的响应将不会被删除”。因此,要同时清除表单响应和工作表,现在需要两个操作……目前没有表单API,但是。这适用于旧表单,您是对的,但新表单似乎不再如此,计数器不再出现在电子表格中,删除“灰色添加行”没有任何效果(至少在我的测试中是这样)。。。不管怎么说,我认为问题是关于遗留形式的,所以现在这不在主题范围之内+1对于这个清晰的演示:-)-注意:您可以通过提供删除最后一个答案的功能来改进它,而不仅仅是删除第一个答案(或者更好:通过选择起始编号来删除任何答案)。谢谢,@Serge。我把一个更完整的版本放在一个要点中——它可以删除所有行。虽然我(或任何想要删除的人)可以对从何处开始删除更具选择性,但我假设最古老的响应是最容易消耗的。至于新表单,如果表单中包含响应而不是电子表格,那么这将不起作用。可以添加到。谢谢@Mogsdad,我已经尝试了您的代码并对其进行了一些调整,它工作了,不仅删除了行,还更新了表单计数器:
//resetInput var shInput=ss.getSheetByName('Input');LastInput=shInput.getLastRow();ss.toast('LastInput在行:'+LastInput)//确认最后一行shInput.deleteRows(2,LastInput-1)代码>
/**
* 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);
}