|
| 1 | +function processFormResponses() { |
| 2 | + try { |
| 3 | + // Specify the Google Sheets linked to the forms |
| 4 | + var sheetIds = [ |
| 5 | + "12j9XBAo8AXo7ofrB5Cbeu1jQ2mP3SFtqQ-c6kU4d27s", // mnt |
| 6 | + "1liZlUD7WW9F1l-6lBJQ5Bb4VZfWVNzZMZb7D0qpKqIQ", // mecanica |
| 7 | + "187dNnLrPZxT5eDyxnOvGuyr67nAPZXIb4rgMZuX0Uhc" // eletronica |
| 8 | + ]; |
| 9 | + |
| 10 | + // Specify the parent folder in the shared drive |
| 11 | + var sharedDriveFolderName = "CVs"; |
| 12 | + var sharedDriveFolders = DriveApp.getFoldersByName(sharedDriveFolderName); |
| 13 | + var parentFolder = sharedDriveFolders.hasNext() ? sharedDriveFolders.next() : DriveApp.createFolder(sharedDriveFolderName); |
| 14 | + |
| 15 | + // Use ScriptProperties to track processed timestamps |
| 16 | + var scriptProperties = PropertiesService.getScriptProperties(); |
| 17 | + |
| 18 | + // Loop through each sheet ID |
| 19 | + for (var sheetIndex = 0; sheetIndex < sheetIds.length; sheetIndex++) { |
| 20 | + var sheetId = sheetIds[sheetIndex]; |
| 21 | + var sheet = SpreadsheetApp.openById(sheetId).getSheets()[0]; // Assuming you want the first sheet |
| 22 | + Logger.log("Processing sheet: " + sheet.getName()); |
| 23 | + |
| 24 | + // Get all responses from the sheet |
| 25 | + var responses = sheet.getDataRange().getValues(); // Includes headers |
| 26 | + |
| 27 | + if (responses) { |
| 28 | + Logger.log("Responses found for sheet: " + sheet.getName()); |
| 29 | + } else { |
| 30 | + Logger.log("Erro ao obter respostas para a folha: " + sheet.getName()); |
| 31 | + continue; // Skip to the next sheet if no responses are found |
| 32 | + } |
| 33 | + |
| 34 | + for (var i = 1; i < responses.length; i++) { |
| 35 | + var row = responses[i]; |
| 36 | + var timestamp = row[0]; |
| 37 | + var studentName = row[1]; |
| 38 | + var fullName = row[2]; |
| 39 | + var email = row[3]; |
| 40 | + var uploadedFileUrl = row[7]; |
| 41 | + |
| 42 | + // Skip processed rows or rows without file upload |
| 43 | + if (scriptProperties.getProperty(timestamp) || !uploadedFileUrl) { |
| 44 | + continue; |
| 45 | + } |
| 46 | + |
| 47 | + try { |
| 48 | + // Create a folder named after the full name or other identifier |
| 49 | + var folderName = "CV" + fullName; |
| 50 | + var folders = parentFolder.getFoldersByName(folderName); |
| 51 | + var folder = folders.hasNext() ? folders.next() : parentFolder.createFolder(folderName); |
| 52 | + |
| 53 | + // Retrieve the uploaded file by its URL |
| 54 | + var uploadedFileId = getFileIdFromUrl(uploadedFileUrl); // Adiciona esta linha para extrair o ID do ficheiro |
| 55 | + if (uploadedFileId) { |
| 56 | + try { |
| 57 | + var uploadedFile = DriveApp.getFileById(uploadedFileId); |
| 58 | + folder.addFile(uploadedFile); |
| 59 | + Logger.log("File successfully added to folder: " + folderName); |
| 60 | + } catch (fileAccessError) { |
| 61 | + Logger.log("Error accessing or adding file with ID " + uploadedFileId + ": " + fileAccessError.toString()); |
| 62 | + } |
| 63 | + } else { |
| 64 | + Logger.log("No valid file ID found in URL: " + uploadedFileUrl); |
| 65 | + } |
| 66 | + |
| 67 | + // Set sharing permissions |
| 68 | + folder.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT); |
| 69 | + var folderUrl = folder.getUrl(); |
| 70 | + |
| 71 | + // Send a confirmation email |
| 72 | + GmailApp.sendEmail(email, "Partilha de CV", |
| 73 | + "Caro " + studentName + ",\n\n" + |
| 74 | + "O teu CV foi adicionado à nossa coleção e pode agora ser consultado pelos nossos patrocinadores.\n\n" + |
| 75 | + "Caso o queiras consultar ou submeter uma nova versão, podes fazê-lo nesta pasta: " + folderUrl + "\n\n" + |
| 76 | + "Cumprimentos,\nFSUMinho"); |
| 77 | + |
| 78 | + Logger.log("Folder created and email sent for: " + fullName); |
| 79 | + |
| 80 | + // Mark the submission as processed by storing its timestamp |
| 81 | + scriptProperties.setProperty(timestamp, "processed"); |
| 82 | + } catch (fileError) { |
| 83 | + Logger.log("Error processing file for row " + (i + 1) + ": " + fileError.toString()); |
| 84 | + } |
| 85 | + } |
| 86 | + } |
| 87 | + } catch (error) { |
| 88 | + Logger.log("Error: " + error.toString()); |
| 89 | + } |
| 90 | +} |
| 91 | + |
| 92 | +/** |
| 93 | + * Helper function to extract the file ID from a Google Drive URL. |
| 94 | + */ |
| 95 | +function getFileIdFromUrl(url) { |
| 96 | + // Verifica dois formatos: /d/<ID> ou ?id=<ID> |
| 97 | + var match = url.match(/(?:\/d\/|id=)([a-zA-Z0-9_-]+)/); |
| 98 | + Logger.log("Extracted File ID: " + (match ? match[1] : "No match found for URL: " + url)); |
| 99 | + return match ? match[1] : null; |
| 100 | +} |
0 commit comments