Google表单将“文件上传”文件重命名为“问题-提交者”

时间:2019-08-30 16:39:19

标签: google-apps-script google-form

我正在使用Google Forms收集团队成员的图像,并且我想确保上传到Google Forms并保存在Google Drive中的每个文件都具有相同的命名约定。

团队成员被要求将其图像上传到五个 文件上传 问题。文件将以随机文件名后跟- firstName lastName的形式放置在Google云端硬盘文件夹中。在 onFormSubmit 触发器上,我想将用户提供的文件的名称更改为fileUploadQuestionName - firstName lastName

我对Google Apps脚本还很陌生,我也不知道如何去做。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以通过以下过程更改每个提交表单上载文件的名称

  • 使用form.getResponses()[LAST FORM SUBMISSION]
  • 检索最后一个表单响应 onFormSubmit
  • 使用getItemResponses()[QUESTION NUMBER].getResponse()检索上载文件的ID
  • 使用DriveApp打开文件ID,并根据需要更改其名称
function myFunction() {
  var form=FormApp.getActiveForm();
// returns the total number of form submissions
  var length=form.getResponses().length;
//replace QUESTION NUMBER through the index of the question prompting the file upload - keep in mind that the first question has the index 0
  var id=form.getResponses()[length-1].getItemResponses()[QUESTION NUMBER].getResponse();
//getResponses()[length-1] retrieves the last form response, accounting for the fact that the first index is zero and hte last length-1
//gets the name of the question
  var fileUploadQuestionName=form.getResponses()[length-1].getItemResponses()[QUESTION NUMBER].getItem().getTitle();
//accesses the uploaded file
  var file=DriveApp.getFileById(id);
  name = file.getName();
//changes the file name
  var name = fileUploadQuestionName+' - '+name.split(' - ')[1]
  file.setName(name);
}

PS:如果要更改后验名称,请更改所有已提交文件的名称,而不仅仅是最后一个文件-您需要遍历所有表单响应:

for(var i=0;i<length;i++){ 
 var id=form.getResponses()[i].getItemResponses()[QUESTION NUMBER].getResponse();
  ...
 ...
  }

答案 1 :(得分:0)

最简单的方法可能是通过基于时间的触发器遍历google驱动器中的指定文件夹,并检查它们是否满足指定条件,或者在重命名后将其移动到其他文件夹。

function checkFile()
{
  var files = DriveApp.getFolderById('ID of Folder').getFiles(); 
// you can find this by going to form responses and clicking the link to an attached file and copying the id from the URL
// https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxxxxxxxxxxx
  var fileUploadQuestionName = 'Test';
  while(files.hasNext())
  {
    var file = files.next();
    var name = file.getName();
    if(name.indexOf(fileUploadQuestionName) == -1)
    {
      name = fileUploadQuestionName+' - '+name.split('-')[1]
      file.setName(name);
    }
  }
}

从那里开始,您需要添加一个基于时间的触发器,以便每小时,每天或每分钟运行一次,具体取决于始终查找正确名称的文件的重要性。

我在Google的formApp文档的响应项中找不到任何有关访问文件的文档。