将 google 个表单文件上传到两个不同的 google 驱动器文件夹
Upload google form files to two different google drive folders
我有一个包含两个文件上传部分的 google 表单。我希望能够将这些文件上传到两个不同的文件夹。第一个文件上传部分中的文件应放在文件夹一中,第二个文件上传部分中的文件应放在文件夹二中。我还想根据发件人的姓名自动命名文件夹。文件夹应如下所示:sendername_1、sendername_2 等,如果发件人具有相同的名称。我将如何做到这一点?我找到了下面的脚本,但它似乎只适用于文件夹 1。文件夹 2 包含来自第二个文件上传部分的文件,但它不会自动为它们创建文件夹。
function onFormSubmit(e) {
const folderId = "1y40PNXYXSm7Ue_b6nbVnauz7dzKiKj4u"; // Please set top folder ID of the destination folders.
const form = FormApp.getActiveForm();
const formResponses = form.getResponses();
const itemResponses = formResponses[formResponses.length-1].getItemResponses();
Utilities.sleep(3000); // This line might not be required.
// Prepare the folder.
const destFolder = DriveApp.getFolderById(folderId);
const folderName = itemResponses[0].getResponse();
const subFolder = destFolder.getFoldersByName(folderName);
const folder = subFolder.hasNext() ? subFolder : destFolder.createFolder(folderName);
// Move files to the folder.
itemResponses[2].getResponse().forEach(id => DriveApp.getFileById(id).moveTo(folder));
}
这是我将如何处理它的示例:
function getIdFromUrl(url)
{
return url.match(/[-\w]{25,}/);
}
function automateFile (e) {
var name = e.values[2]
var file1 = e.values[3];
var file2 = e.values[4];
var drive = DriveApp;
var parentFolder = drive.getFolderById("1vJcsklbZ_Lk0b3CH0JxUHN8UzNI0eKXV"); //Set Parent Folder ID
var createFolder1 = drive.createFolder(name + '_1').moveTo(parentFolder);
var createFolder2 = drive.createFolder(name + '_2').moveTo(parentFolder);
var getfileId1 = getIdFromUrl(file1); //Gets the file ID 1
drive.getFileById(getfileId1).moveTo(createFolder1); // Moves the file to Folder1
var getfileId2 = getIdFromUrl(file2); //Gets the file ID 2
drive.getFileById(getfileId2).moveTo(createFolder2); // Moves the file to Folder2
}
备注:
此脚本是在 Google Sheets Apps 脚本上完成的,它是为 Google 表单上的表单响应创建的 sheet。
确保你像这样创建一个 trigger:
我从这个 reference 使用了这个函数 getIdFromUrl(url)
因为 file1
和 file2
只有 returns 整个 URL,而不是文件 ID,截至目前,还没有 getFileById
方法可以从您的表单中移动上传的文件。
我的 Google 表格截图:
内部驱动器:
文件移动到创建的文件夹中:
我有一个包含两个文件上传部分的 google 表单。我希望能够将这些文件上传到两个不同的文件夹。第一个文件上传部分中的文件应放在文件夹一中,第二个文件上传部分中的文件应放在文件夹二中。我还想根据发件人的姓名自动命名文件夹。文件夹应如下所示:sendername_1、sendername_2 等,如果发件人具有相同的名称。我将如何做到这一点?我找到了下面的脚本,但它似乎只适用于文件夹 1。文件夹 2 包含来自第二个文件上传部分的文件,但它不会自动为它们创建文件夹。
function onFormSubmit(e) {
const folderId = "1y40PNXYXSm7Ue_b6nbVnauz7dzKiKj4u"; // Please set top folder ID of the destination folders.
const form = FormApp.getActiveForm();
const formResponses = form.getResponses();
const itemResponses = formResponses[formResponses.length-1].getItemResponses();
Utilities.sleep(3000); // This line might not be required.
// Prepare the folder.
const destFolder = DriveApp.getFolderById(folderId);
const folderName = itemResponses[0].getResponse();
const subFolder = destFolder.getFoldersByName(folderName);
const folder = subFolder.hasNext() ? subFolder : destFolder.createFolder(folderName);
// Move files to the folder.
itemResponses[2].getResponse().forEach(id => DriveApp.getFileById(id).moveTo(folder));
}
这是我将如何处理它的示例:
function getIdFromUrl(url)
{
return url.match(/[-\w]{25,}/);
}
function automateFile (e) {
var name = e.values[2]
var file1 = e.values[3];
var file2 = e.values[4];
var drive = DriveApp;
var parentFolder = drive.getFolderById("1vJcsklbZ_Lk0b3CH0JxUHN8UzNI0eKXV"); //Set Parent Folder ID
var createFolder1 = drive.createFolder(name + '_1').moveTo(parentFolder);
var createFolder2 = drive.createFolder(name + '_2').moveTo(parentFolder);
var getfileId1 = getIdFromUrl(file1); //Gets the file ID 1
drive.getFileById(getfileId1).moveTo(createFolder1); // Moves the file to Folder1
var getfileId2 = getIdFromUrl(file2); //Gets the file ID 2
drive.getFileById(getfileId2).moveTo(createFolder2); // Moves the file to Folder2
}
备注: 此脚本是在 Google Sheets Apps 脚本上完成的,它是为 Google 表单上的表单响应创建的 sheet。
确保你像这样创建一个 trigger:
我从这个 reference 使用了这个函数 getIdFromUrl(url)
因为 file1
和 file2
只有 returns 整个 URL,而不是文件 ID,截至目前,还没有 getFileById
方法可以从您的表单中移动上传的文件。
我的 Google 表格截图:
内部驱动器:
文件移动到创建的文件夹中: