我正在尝试创建一个谷歌应用脚本,它允许我执行以下操作。
我的谷歌表单如下所示:
录制回复时,我希望将通过问题 2-4 提交的文件重命名为 1 中的回复(公司名称)(例如 CompanyName_Logo、CompanyName_Photo、CompanyName_Video)。
然后我想在 GDrive 的父文件夹中创建一个文件夹。创建的文件夹将以公司名称命名。 然后我希望所有提交的文件都重新定位到这个文件夹中。
但我意识到提交者可能想为每个问题提交多个文件。
一个非常有用的堆栈溢出响应程序为我提供了下面的代码。但我意识到该代码仅适用于每个问题仅提交一个文件的情况。如何修改此代码以允许处理每个问题提交的多个文件? :
function onFormSubmit(e) {
const responses = e.values;
const companyName = responses[1];
const logoFileId = extractFileId(responses[2]);
const photoFileId = extractFileId(responses[3]);
const videoFileId = extractFileId(responses[4]);
const parentFolderId = 'paste-parent-folder-id-here';
const parentFolder = DriveApp.getFolderById(parentFolderId);
const companyFolder = parentFolder.createFolder(companyName);
function moveAndRenameFile(fileId, newName) {
try {
if (fileId) {
Logger.log(`Attempting to move file ID: ${fileId}`);
const file = DriveApp.getFileById(fileId);
file.setName(newName);
file.moveTo(companyFolder);
}
} catch (error) {
Logger.log(`Error with file ID ${fileId}: ${error.message}`);
}
}
moveAndRenameFile(logoFileId, `${companyName}_Logo`);
moveAndRenameFile(photoFileId, `${companyName}_Photo`);
moveAndRenameFile(videoFileId, `${companyName}_Video`);
}
function extractFileId(url) {
if (url) {
const parts = url.split('=');
return parts.length > 1 ? parts[1] : null;
}
return null;
}
谢谢您的帮助。
我修改了您的代码,现在可以在表单提交上处理和移动多个文件。
代码如下:
function onFormSubmit(e) {
const responses = e.values;
const companyName = responses[1];
const logoFileId = responses[2];
const photoFileId = responses[3];
const videoFileId = responses[4];
const parentFolderId = 'paste-parent-folder-id-here';
const parentFolder = DriveApp.getFolderById(parentFolderId);
const companyFolder = parentFolder.createFolder(companyName);
extractFileId(logoFileId, `${companyName}_Logo`);
extractFileId(photoFileId, `${companyName}_Photo`);
extractFileId(videoFileId, `${companyName}_Video`);
function extractFileId(url, name) {
const data = url;
if (data.includes(',')) {
const splitedData = data.split(',');
for (let i = 0; i < splitedData.length; i++) {
moveAndRenameFile(splitedData[i].split("=")[1], name)
}
return
} else if (!data) {
console.log("No Action taken");
return;
}
moveAndRenameFile(data.split("=")[1], name)
return
}
function moveAndRenameFile(fileId, newName) {
try {
if (fileId) {
Logger.log(`Attempting to move file ID: ${fileId}`);
const file = DriveApp.getFileById(fileId);
file.setName(newName);
file.moveTo(companyFolder);
}
} catch (error) {
Logger.log(`Error with file ID ${fileId}: ${error.message}`);
}
}
}
以下是如何创建附加多个文件的表单问题。
示例输出
参考资料: