我有一个已安装触发器(onFormSubmit
)的表单我想复制多人:“表格人X”,“表格人Y”......
复制的表单应该与源完全相同。目前我正在使用函数makeCopy(name, destination)
来执行此操作。问题是没有复制已安装的触发器,如果脚本没有在脚本编辑器中运行,则表示使用newTrigger(functionName)
,因为新表单没有添加触发器。
formFile.makeCopy(newFileName, formFolder);
var newFile = formFolder.getFilesByName(newFileName).next();
var newFileId = newFile.getId();
var newForm = FormApp.openById(newFileId);
newForm.setTitle(newFileName);
ScriptApp.newTrigger("onFormSubmit")
.forForm(newForm)
.onFormSubmit()
.create();
原因可能是您必须允许脚本访问应用程序,如果是这样的话,是否有办法解决这个问题而无需为每个新表单打开脚本?
我注意到当我回答“人X”的形式时,源表格会被修改。这很奇怪,因为我使用的是ObjectEvent的source
形式。
答案 0 :(得分:0)
它的工作方式很可能是WAI。
表单提交EventObject的source
定义为
一个Form对象,表示脚本绑定到的Google Forms文件
由于脚本仍然绑定到“基础”表单,因此即使另一个表单正在调用该函数,它也会将基本表单作为源返回。
为文档,电子表格或表单添加触发器的功能(例如forForm(Form form)
)仅适用于文档,电子表格或加载项所属的形式
加载项只能为使用加载项的文档或电子表格创建触发器。也就是说,Google Doc A中使用的附加组件无法创建触发器来监控Google Doc B何时打开。
解决方法可能是在新创建的表单中添加一个必需的复选框,只有一个值是表单的id。然后,您可以在阅读FormResponse时使用id。