Google脚本:表单提交后创建文件夹

时间:2015-02-11 23:59:28

标签: google-apps-script google-drive-api google-form

这是我第一次编写Google Script。我从未编写过JavaScript,但我确实有Java和Python方面的经验。我对此脚本的目标是,一旦提交了表单,我希望脚本创建一个使用多项选择问题的答案之一命名的文件夹。该文件夹应放在与Form所在的目录相同的目录中。到目前为止,我的Google脚本包含以下内容:

function createFolder(e) {
  var existingForm = FormApp.getActiveForm();
  if(e){
    var response = e.response;
    var items = response.getItemResponses();
    DriveApp.createFolder(items[1].getResponse());
  }
}

function createSubmitTrigger(){
  var existingForm = FormApp.getActiveForm();
  ScriptApp.newTrigger('createFolder').forForm(existingForm).onFormSubmit().create();
}

这是我已经创建的Form的有界脚本。我在脚本编辑器中运行了我的脚本,没有收到任何错误。我还自己向表单提交了一个响应,但是没有创建新的文件夹。执行脚本显示脚本执行了getActiveForm()功能,但没有过去。因此,我相信它并没有进入我在第3行的'if'声明。我确信我缺少一些基本的东西,但我不太确定它是什么。任何有关这方面的帮助将不胜感激。

顺便说一句,我确实在我的收件箱中查看是否收到了触发器的错误消息,但我没有看到任何内容。

4 个答案:

答案 0 :(得分:0)

您无法将参数传递给触发器功能。

答案 1 :(得分:0)

为什么使用触发器? 您可以在脚本中使用Folder类。

https://developers.google.com/apps-script/reference/drive/folder#addFolder(Folder)

var folders = DriveApp.addFolder("link in your Google Drive");

答案 2 :(得分:0)

这个有效:

function createFolder(e) {
  var items = e.response.getItemResponses()
  var name = items[1].getResponse();
  new_folder = DriveApp.createFolder(name);

  var submittedID = items[3].getResponse();

  for (i = 0; i < submittedID.length; i++) { 
    var file = DriveApp.getFileById(submittedID[i]);
    file.makeCopy(new_folder);
  }
} 

创建一个新文件夹,并将响应中的三个文件(图像,音频等)放入新文件夹中。我的第二个响应成为新文件夹的名称。通过这种方式,您可以轻松区分为每个提交上传的文件,而不是将它们全部放在同一个文件夹中。

不是完全你要求的但非常接近。

答案 3 :(得分:0)

右。所以这是我的便士价值。我没有经验,但我设法在一些严重的神经之后破解了这个。

  1. 在表单上提交用户上传文件,默认情况下,该文件将转到表单响应文件夹
  2. 使用下面的脚本,可以定义源文件夹并创建一个带有其中一个表单答案名称的附加文件夹。父文件夹(sourceFolder)可以是任何文件夹,包括原始的google表单文件夹;只需从网址获取唯一ID并将其粘贴到第4行
  3. 即可
  4. 然后将上传文件的副本添加到所述文件夹中,鲍勃是你的叔叔

    function createFolder(e) {
      var items = e.response.getItemResponses()
      var documentName = items[0].getResponse(); 
      var sourceFolder = DriveApp.getFolderById('copy and paste parent folderid here');                                                                        
      var new_folder = sourceFolder.createFolder(documentName);
    
      var submittedID = items[3].getResponse(); 
    
      for (var i = 0; i < submittedID.length; i++) { 
        var file = DriveApp.getFileById(submittedID[i]);
        file.makeCopy(new_folder);
      }
    } 
    
  5. 一个令人头痛的问题是在google电子表格中使用[i]方式找到答案,我可能会变得非常善变,但最终有效。为了确保您没有以空文件夹结束,请确保在用户实际上载文档之前必须提出所有问题。希望这有助于某人

    我不想/需要这样做,但如果您要删除原始上传的文件,请使用[setTrashed(True)][1]。在关闭&#34; for&#34;之前,在file.makeCopy下添加它。环。请注意,如果您这样做,响应电子表格中的链接将无效,但您将在子文件夹中获得上传文件的副本。