根据 Google 表单提交者的姓名,创建一个文件夹,重命名文件并将这些文件重新定位到该创建的文件夹

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

我正在尝试创建一个谷歌应用脚本,它允许我执行以下操作。

我的谷歌表单如下所示:

  1. 您的公司名称是什么。
  2. 提交您的公司徽标。
  3. 提交您的公司照片。
  4. 提交您的公司视频。

录制回复时,我希望将通过问题 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;
}

谢谢您的帮助。

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

在 FormSubmit 上移动多个文件

我修改了您的代码,现在可以在表单提交上处理和移动多个文件。

代码如下:

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}`);
    }
  }

}

以下是如何创建附加多个文件的表单问题。

Sample 1

示例输出

Lime Husky

Lime Husky Child Folder

Lime Husky Child Folder Output


参考资料:

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