Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌脚本:表单提交后创建文件夹_Google Apps Script_Google Drive Api_Google Forms - Fatal编程技术网

Google apps script 谷歌脚本:表单提交后创建文件夹

Google apps script 谷歌脚本:表单提交后创建文件夹,google-apps-script,google-drive-api,google-forms,Google Apps Script,Google Drive Api,Google Forms,这是我第一次写谷歌脚本。我从未编写过JavaScript,但我有Java和Python方面的经验。我使用这个脚本的目标是,一旦提交表单,我希望脚本创建一个文件夹,该文件夹使用多项选择题的一个答案命名。文件夹应与表单所在的目录相同。到目前为止,我的Google脚本包括以下内容: function createFolder(e) { var existingForm = FormApp.getActiveForm(); if(e){ var response = e.response

这是我第一次写谷歌脚本。我从未编写过JavaScript,但我有Java和Python方面的经验。我使用这个脚本的目标是,一旦提交表单,我希望脚本创建一个文件夹,该文件夹使用多项选择题的一个答案命名。文件夹应与表单所在的目录相同。到目前为止,我的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();
}
这是一个绑定到我已经创建的表单的脚本。我在脚本编辑器中运行了脚本,没有收到任何错误。我自己也提交了对表单的回复,但没有创建新文件夹。执行记录显示脚本执行了
getActiveForm()
函数,但没有超过该函数。因此,我相信它没有进入我在第三行的“如果”语句。我确信我遗漏了一些基本的东西,但我不太确定它是什么。在此方面的任何帮助都将不胜感激


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

您不能将参数传递给触发器函数。

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

这一个有效:

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);
  }
} 
函数createFolder(e){
var items=e.response.getItemResponses()
var name=items[1]。getResponse();
新建文件夹=DriveApp.createFolder(名称);
var submittedID=items[3]。getResponse();
对于(i=0;i
创建一个新文件夹,并将作为响应三上传的文件(图像、音频等)放入一个新文件夹。我的第二个响应将成为新文件夹的名称。通过这种方式,您可以轻松区分每次提交时上载的文件,而不是将它们全部放在同一文件夹中


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

对。这是我的便士。我一点经验也没有,但在经历了一些严重的紧张之后,我设法打破了这一局面

  • 在表单提交时,用户上载文件,默认情况下,该文件将转到表单响应文件夹
  • 使用下面的脚本,您可以定义一个源文件夹,并创建一个附加文件夹,其中包含一个表单答案的名称。父文件夹(sourceFolder)可以是任何文件夹,包括原始google表单文件夹;只需从URL中获取唯一id并将其粘贴到第4行
  • 然后,上传文件的副本被添加到所述文件夹和Bob的你叔叔

    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);
      }
    } 
    
    函数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();
    对于(var i=0;i
  • 一个让人头疼的问题是,在谷歌电子表格中使用条目[i]来寻找答案,在这种情况下,我可能是一个变化无常的人,但最终还是成功了。要确保不会出现空文件夹,请确保在用户实际上载文档之前,所有问题都是必需的。希望这对某人有帮助


    我不想/不需要这样做,但如果您想删除原始上传的文件,请使用
    [setTrashed(True)][1]
    。在关闭“for”循环之前,将其添加到file.makeCopy下。请注意,如果您这样做,响应电子表格中的链接将不起作用,但您将在子文件夹中拥有上载文件的副本。

    我使用触发器,因为我希望仅在提交表单后创建新文件夹。所以我不确定你的建议是否适合我。我不确定我是否听懂了你的话。提交表单后不创建“e”变量吗?因此,
    createSubmitTrigger
    函数应该在表单提交后运行,
    createFolder
    应该从
    createSubmitTrigger
    继承
    e
    。我没有正确理解吗?在检查之前,您是否尝试记录e的值,以确保发送了正确的事件?
    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);
      }
    }