Google表格:如何将多个文件上传保存在特定文件夹中?

时间:2019-07-09 12:10:06

标签: google-apps-script upload google-form multiple-file-upload

我在Google表单上创建了一个自定义表单,其中包含一个上载文件问题(允许多个文件)。提交表单时,我试图运行一个脚本,该表单创建一个文件夹到云端硬盘中的特定目标位置,并保存在此文件夹中上传的文件。但是我不知道如何检索上载的文件的ID并将其移动到新文件夹中。 谢谢

我设法创建了新文件夹,但是无法选择上传的文件并将其保存(或移动)到目标文件夹。我没有发布创建文件夹的代码。

function onFormSubmit(e) {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();
  var itemResponse = itemResponses[1];
  var uploadedfile = itemResponse.getResponse();

  //now??
}

我想获取文件的ID,但是使用.getItem()。getID()方法,我得到的像1.148501776E9 还有如何循环浏览上传的文件?

2 个答案:

答案 0 :(得分:0)

  • 通过Google表单上传文件时,您想将上传的文件移至特定文件夹。
  • 您已经为onFormSubmit()安装了OnSubmit事件触发器。
  • 您已经具有目标文件夹的文件夹ID。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

修改点:

修改后的脚本:

在使用此脚本之前,请将目标文件夹ID设置为var folderId = "###"

修改脚本后,请删除一次OnSubmit事件触发器,然后重新安装触发器。那时,如果显示授权屏幕。请授权。这样,脚本就可以工作了。请注意这一点。

function onFormSubmit(e) {
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();

  // I modified below script.
  Utilities.sleep(3000);

  var folderId = "###";  // Please set folder ID of the destination folder.

  var destfolder = DriveApp.getFolderById(folderId);
  for (var i = 0; i < itemResponses.length; i++) {
    if (itemResponses[i].getItem().getType() == "FILE_UPLOAD") {
      var ids = itemResponses[i].getResponse();
      for (var j = 0; j < ids.length; j++) {
        var file = DriveApp.getFileById(ids[j]);
        destfolder.addFile(file);
        file.getParents().next().removeFile(file);
      }
    }
  }
}

注意:

  • 在我的测试案例中,当未使用Utilities.sleep(3000)时,会出现错误,因为在文件上传未完成之前尝试移动文件。所以我说了。如果在您的环境中没有该错误不会发生任何错误,请删除它。

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

答案 1 :(得分:0)

Google通过以下方式存储上传的文件:

  1. 它将创建文件夹"Placeholder_for_Name_of_the_Form"(File responses)和子文件夹"Placeholder_for_Name_of_Question"(File responses),并将所有上传的文件存储在此处。
  2. 如果将表单链接到电子表格,电子表格将包含上载文件的URL(包含ID)作为问题的答案。您还可以使用Apps Script(相关方法:openSpreadsheetbyId(); getRage(); getValues(),...)以编程方式访问这些数据。

enter image description here

如果您想在与onFormSubmit()不同的时间点检索数据,此信息可能对您有用。