复制文件的工作脚本

时间:2016-03-10 19:53:47

标签: google-apps-script google-form

我有一个已安装触发器(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形式。

1 个答案:

答案 0 :(得分:0)

它的工作方式很可能是WAI。

表单提交EventObject的source定义为

  

一个Form对象,表示脚本绑定到的Google Forms文件

Source

由于脚本仍然绑定到“基础”表单,因此即使另一个表单正在调用该函数,它也会将基本表单作为源返回。

为文档,电子表格或表单添加触发器的功能(例如forForm(Form form))仅适用于文档,电子表格或加载项所属的形式

  

加载项只能为使用加载项的文档或电子表格创建触发器。也就是说,Google Doc A中使用的附加组件无法创建触发器来监控Google Doc B何时打开。

Source

解决方法可能是在新创建的表单中添加一个必需的复选框,只有一个值是表单的id。然后,您可以在阅读FormResponse时使用id。