首页 > 解决方案 > GOOGLE FORM - 如何在代码中指定子文件夹名称?

问题描述

如何操作这行代码,以便我可以根据谷歌表单中的响应创建一个新文件夹。我有一个名为“名称”的字段。我希望它不仅进入父文件夹,而且创建一个带有客户“名称”的新文件夹。

如何使用以下代码做到这一点?

谷歌脚本:

`谷歌脚本代码

const initialize = () => {
const form = FormApp.getActiveForm();
ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create();
};

const onFormSubmit = ({ response } = {}) => {
try {
// Get a list of all files uploaded with the response
const files = response
  .getItemResponses()
  // We are only interested in File Upload type of questions
  .filter(
    (itemResponse) =>
      itemResponse.getItem().getType().toString() === "FILE_UPLOAD"
  )
  .map((itemResponse) => itemResponse.getResponse())
  // The response includes the file ids in an array that we can flatten
  .reduce((a, b) => [...a, ...b], []);

if (files.length > 0) {
  // Each form response has a unique Id
  const subfolderName = response.getId();
  const parentFolder = DriveApp.getFolderById(PARENT_FOLDER_ID);
  const subfolder = parentFolder.createFolder(subfolderName);
  files.forEach((fileId) => {
    // Move each file into the custom folder
    DriveApp.getFileById(fileId).moveTo(subfolder);
  });
}
} catch (f) {
Logger.log(f);
}
};

标签: google-apps-scriptgoogle-forms

解决方案


您应该将创建触发器的函数更改为如下所示:

function initialize() {
  const form = FormApp.getActiveForm();
  const ts = ScriptApp.getProjectTriggers().map(t=>t.getHandlerFunction());
  if(!~ts.indexOf('onFormSubmit')) {
    ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create();
  }
}

这样您就不会创建多个触发器。

function onFormSubmit(e) {
  try {
    var subfolderName;
    const files = e.response.getItemResponses().filter(itemResponse => itemResponse.getItem().getType().toString() === "FILE_UPLOAD").map((itemResponse) => itemResponse.getResponse()).reduce((a, b) => [...a, ...b], []);
    e.response.getItemResponses().forEach(r => { if (r.getItem().getTitle() == 'Hold') { subfolderName = r.getResponse(); } });
    if (files.length > 0) {
      const parentFolder = DriveApp.getFolderById(PARENT_FOLDER_ID);
      const subfolder = parentFolder.createFolder(subfolderName);
      files.forEach((fileId) => {
        DriveApp.getFileById(fileId).moveTo(subfolder);
      });
    }
  } catch (f) {
    Logger.log(f);
  }
};

我认为这会奏效,但我必须承认我在电子表格中完成了大部分表单编码。


推荐阅读