Skip to content

Instantly share code, notes, and snippets.

@badcock4412
Created January 18, 2025 17:45
Show Gist options
  • Save badcock4412/55ff1153ccc5c3f3b90d755247e3ab89 to your computer and use it in GitHub Desktop.
Save badcock4412/55ff1153ccc5c3f3b90d755247e3ab89 to your computer and use it in GitHub Desktop.
Google Forms: Move all uploaded files to folder based on responses
/**
 * @param {FormApp.Form} form
 * @param {FormApp.FormResponse} response
 */
function getAllFileIds(form, response) {
  let out = [];
  form.getItems().
    filter(item => item.getType() === FormApp.ItemType.FILE_UPLOAD).
    map(item => response.getResponseForItem(item)).
    filter(itemResponse => itemResponse !== null).
    map(itemResponse => itemResponse.getResponse()).
    forEach(response => {
      if ( Array.isArray(response) ) {
        response.forEach(fileId => out.push(fileId))
      } else {
        out.push(response)
      }
    })
  return out;
}
/**
 * @param {DriveApp.Folder} parentFolder
 * @param {string} folderName
 * @param {Array.<string>} files
 */
function moveFilesToFolder(parentFolder, folderName, files) {
  let targetFolder = ( () => {
    let folders = parentFolder.getFoldersByName(folderName)
    if ( folders.hasNext() ) {
      return folders.next()
    }
    return parentFolder.createFolder(folderName)
  })()
  files.forEach(fileId => {
    DriveApp.
      getFileById(fileId).
      moveTo(targetFolder)
  })
}
/**
 * @param {DriveApp.Folder} parentFolder
 * @param {string} folderName
 * @param {Array.<string>} files
 */
function nameSubfolder(response) {
  var itemResponses = response.getItemResponses();
  return itemResponses[0].getResponse() + '- ' + itemResponses[1].getResponse();
}
/**
 * @param {Object} obj - a form submission
 * @param {FormApp.Form} obj.source - the source form
 * @param {FormApp.FormResponse} obj.response - the user response
 */
function onSubmit({ source: form, response }) {
  moveFilesToFolder(
    DriveApp.getFolderById("parent folder id"),
    nameSubfolder(response),
    getAllFileIds(form, response)
  )
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment