我想要自动化一个流程,在其中我从 Google 表单接收信息和照片,创建一个文件夹并将它们添加到那里

问题描述 投票:0回答:1

我正在努力解决以下问题:

我有一个 Google 表单,上面有 40 多个问题。最后一张需要填写表格的人提供几张照片。

我想自动化整个过程并最终得到以下结果:

  1. 当一个人填写表单时,自动创建一个新文件夹。文件夹的名称应该是 Google 表单的第一个回复(必填问题,唯一结果)
  2. 创建文件夹后,我想要创建一个电子表格,其中列出了所有问题作为标题以及其下方的所有答案
  3. 我已设置将 3 张照片保存在我的驱动器上。我希望它们直接保存在新创建的文件夹中,或者复制/移动到那里 - 这两个选项都适合我。

最终结果几乎是,一旦有人填写了表格,就会创建一个新文件夹,其中包含他的第一个答案,并且该文件夹包含他对问题的答复(在谷歌或电子表格中,并不重要)以及所有他附加的照片/文件也在此文件夹中。

我一直在努力,只能到达创建文件夹和电子表格的位置,但我无法将照片移动到该文件夹。

首先,我尝试通过 Zapier 等无代码平台实现自动化。这不起作用(至少对我来说),因为我有太多变量(我既不知道新文件夹的名称,也不知道客户提交表单之前的文件名称)。

然后我在 Chat-GPT 的帮助下尝试使用脚本(我不是程序员):

但再一次,它只创建文件夹并添加电子表格。里面没有照片。

任何帮助将不胜感激!

附注我对任何类型的解决方案持开放态度 - 使用不同的平台,使用无编码,甚至学习如何创建特定的代码

P.S.2 找到了上传代码的方法

脚本1:

function onFormSubmit(e) {
  var formResponses = e.values;
  var folderName = formResponses[1];
  
  var parentFolder = getOrCreateParentFolder('Surveys');
  

  var folder = parentFolder.createFolder(folderName);

 
  var spreadsheet = SpreadsheetApp.create(folderName + '_Responses');
  
 
  DriveApp.getFileById(spreadsheet.getId()).moveTo(folder);

  
  var questions = e.source.getSheetByName("Form Responses 1").getRange(1, 1, 1, e.values.length).getValues()[0];
  spreadsheet.getActiveSheet().appendRow(questions);


  var sheet = spreadsheet.getActiveSheet();
  sheet.appendRow(formResponses.slice(0)); // Start from the second item (index 1).


  var files = e.response.getFiles();
  for (var i = 0; i < files.length; i++) {
    var file = DriveApp.getFileById(files[i].getId());
    folder.createFile(file); // Move the uploaded file to the newly created folder.
  }
}

function getOrCreateParentFolder(folderName) {
  var parentFolder;
  var folders = DriveApp.getFoldersByName(folderName);
  if (folders.hasNext()) {
    parentFolder = folders.next();
  } else {
    parentFolder = DriveApp.createFolder(folderName);
  }
  return parentFolder;
}
function triggerSecondScript() {
  ScriptApp.newTrigger('movePhotosToDestinationFolders')
    .timeBased()
    .after(1 * 60 * 2000) // Adjust the delay time (in milliseconds) as needed
    .create();
}

脚本2:

function movePhotosToDestinationFolders() {
  var sourceFolderId = "1TeXcyIYbwmUIB8o5HQlhreCLwsE2R1Ak1mqtzNipdQ6H0zrhvR3sjZ3WGB72xSkYI8WZW-MW"; 
  var destinationFolderName = "Surveys";

   
  var sourceFolder = DriveApp.getFolderById(sourceFolderId);

   
  var files = sourceFolder.getFiles();

 
  while (files.hasNext()) {
    var file = files.next();
    
   
    var fileName = file.getName();
    var email = fileName.split('.')[0];
    
  
    var destinationFolder = getOrCreateParentFolder(destinationFolderName).getFoldersByName(email);
    
   
    if (destinationFolder.hasNext()) {
      destinationFolder.next().createFile(file);
      file.setTrashed(true); // Delete the original file.
    } else {
      // Handle cases where the folder doesn't exist for this email (optional).
    }
  }
}

function getOrCreateParentFolder(folderName) {
  var parentFolder;
  var folders = DriveApp.getFoldersByName(folderName);
  if (folders.hasNext()) {
    parentFolder = folders.next();
  } else {
    parentFolder = DriveApp.createFolder(folderName);
  }
  return parentFolder;
}

google-apps-script google-forms zapier
1个回答
0
投票

我正在开发relay.app,这是一个类似于 Zapier 的自动化工具。我看到你的问题并意识到这个自动化工作流程在 Relay 中是相当可行的,但有一些注意事项。

该手册每小时检查一次新的表单响应,并执行概述的所有步骤 - 大部分如您所描述的那样。

注意事项:

  1. 目前 Relay 中的解决方案仅在您的表单问题同时接受最多 1 个文件时才有效。因此,您需要对多个文件重复某些步骤。我意识到这不是最佳选择,但如果您只期望 3 个文件,这似乎是一个不错的妥协。
  2. 将文件从 Google 表单存储位置复制/移动到新位置需要在剧本中执行相当多的步骤。绝对有点笨重,我们将来会让它变得更容易,但它确实有效(文件本质上被“复制”)

如果您需要我帮助设置,请告诉我,或者直接向我发送电子邮件至 thijs@[产品名称]

© www.soinside.com 2019 - 2024. All rights reserved.