2017-06-08 4 views
0

Ich habe ein Google-Formular, das die Datei-Upload-Funktion verwendet, die auf der folgenden Website erwähnt wird, https://sites.google.com/site/scriptsexamples/home/announcements/google-forms-file-upload-featurePrevent Umbenennen von Google Forms Datei hochladen

I 2 Dinge frage mich:

  1. Gibt es eine Möglichkeit, das Umbenennen der hochgeladenen Datei zu verhindern. (IE: original_file_name - Name des Uploader)
  2. In Bezug auf die folgenden Zitat:

    Wenn ein Befragter entscheidet eine Datei direkt von seinem Antrieb zu laden, eine Kopie wird gemacht und die Form Eigentümer wird sich Besitzer des Kopieren.

Ist es möglich, die Originaldatei und entfernen Sie sie zu identifizieren, so dass sie nicht die uploaders root Drive-Ordner nicht Junk auf.

function getCurrentResponses() { 
    var form = FormApp.openById('formID'); 
    var formResponses = form.getResponses(); 
    var numResponses = formResponses.length; 
    var lastResponse = formResponses[numResponses - 1]; 
    var lastResponseItem = lastResponse.getItemResponses(); 
    var emailAddress = lastResponseItem[0].getResponse(); 
    Logger.log('emailAddress: ' + emailAddress); 
    var zone = lastResponseItem[1].getResponse(); 
    Logger.log('zone: ' + zone); 
    var projectName = lastResponseItem[2].getResponse(); 
    Logger.log('projectName: ' + projectName); 
    var igeURL = lastResponseItem[3].getResponse(); 
    Logger.log('igeURL: ' + igeURL); 

//Creating folder for submitted project 
    var DriveFolder = DriveApp.getFolderById("destinationFolder"); 
    var folderName = projectName; 
    //create the folder 
    var folderpath = DriveFolder.createFolder(folderName).addEditor(emailAddress).getId(); 
//get the path to the folder 
    var pathtoemail = "https://drive.google.com/drive/folders/"+folderpath; 
    var file = DriveApp.getFileById(igeURL); 
    file.getParents().next().removeFile(file); 
    DriveApp.getFolderById(folderpath).addFile(file); 
    var fileName = file.getName(); 

    //Create the message and subject of the email 
var message = 'Thank you for submitting. Here is the link to your drive folder. Please use this folder to upload and receive related documentation. ' +pathtoemail ; //a custom message, feel free to change anything inside the quotes 

var subject = "Form Related Documentation." ; 
//send the email 
    MailApp.sendEmail(emailAddress, subject, message, { 
    // cc: '[email protected]'   // optional cc 

}); 

/* 
* Convert Excel file to Sheets 
* https://gist.github.com/azadisaryev/ab57e95096203edc2741 
* Retrieved 06/08/2017 
*/ 

    var xlsId = igeURL; // ID of Excel file to convert 
    var xlsFile = DriveApp.getFileById(xlsId); // File instance of Excel file 
    var xlsBlob = xlsFile.getBlob(); // Blob source of Excel file for conversion 
    var xlsFilename = xlsFile.getName(); // File name to give to converted file; defaults to same as source file 
    var destFolders = folderpath; // array of IDs of Drive folders to put converted file in; empty array = root folder 
    Logger.log("destFolders: " + destFolders); 
    var ss = convertExcel2Sheets(xlsBlob, xlsFilename, destFolders); 
    var ssID = ss.getId(); 
    Logger.log(ss.getId()); 
    var convertFile = DriveApp.getFileById(ssID); 
    convertFile.getParents().next().removeFile(convertFile); 
    DriveApp.getFolderById(folderpath).addFile(convertFile); 

} 

/** 
* Convert Excel file to Sheets 
* https://gist.github.com/azadisaryev/ab57e95096203edc2741 
* Retrieved 06/08/2017 
* @param {Blob} excelFile The Excel file blob data; Required 
* @param {String} filename File name on uploading drive; Required 
* @param {Array} arrParents Array of folder ids to put converted file in; Optional, will default to Drive root folder 
* @return {Spreadsheet} Converted Google Spreadsheet instance 
**/ 
function convertExcel2Sheets(excelFile, filename, arrParents) { 

    var parents = arrParents || []; // check if optional arrParents argument was provided, default to empty array if not 
    if (!parents.isArray) parents = []; // make sure parents is an array, reset to empty array if not 
    Logger.log("arrParents: " + arrParents); 

    // Parameters for Drive API Simple Upload request (see https://developers.google.com/drive/web/manage-uploads#simple) 
    var uploadParams = { 
    method:'post', 
    contentType: 'application/vnd.ms-excel', // works for both .xls and .xlsx files 
    contentLength: excelFile.getBytes().length, 
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}, 
    payload: excelFile.getBytes() 
    }; 

    // Upload file to Drive root folder and convert to Sheets 
    var uploadResponse = UrlFetchApp.fetch('https://www.googleapis.com/upload/drive/v2/files/?uploadType=media&convert=true', uploadParams); 

    // Parse upload&convert response data (need this to be able to get id of converted sheet) 
    var fileDataResponse = JSON.parse(uploadResponse.getContentText()); 

    // Create payload (body) data for updating converted file's name and parent folder(s) 
    var payloadData = { 
    title: filename, 
    parents: [] 
    }; 
    if (parents.length) { // Add provided parent folder(s) id(s) to payloadData, if any 
    for (var i=0; i<parents.length; i++) { 
     try { 
     var folder = DriveApp.getFolderById(parents[i]); // check that this folder id exists in drive and user can write to it 
     payloadData.parents.push({id: parents[i]}); 
     } 
     catch(e){} // fail silently if no such folder id exists in Drive 
    } 
    } 
    // Parameters for Drive API File Update request (see https://developers.google.com/drive/v2/reference/files/update) 
    var updateParams = { 
    method:'put', 
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}, 
    contentType: 'application/json', 
    payload: JSON.stringify(payloadData) 
    }; 

    // Update metadata (filename and parent folder(s)) of converted sheet 
    UrlFetchApp.fetch('https://www.googleapis.com/drive/v2/files/'+fileDataResponse.id, updateParams); 

    return SpreadsheetApp.openById(fileDataResponse.id); 
} 
+0

1. Denken Sie nicht so. 2. Ja – noogui

+0

@noogui Vielen Dank für die Antwort. Ich werde weiter am Code arbeiten, um zu versuchen, zu bekommen, wonach ich suche. – wjwelch1

Antwort

0

Ich wollte nur, dass ich einen Work-around für die Umbenennung der Datei erstellen konnte.

Wie für meine zweite Frage, ich konnte es immer noch nicht lösen. Ich werde posten, wenn ich eine Lösung finde.

0

Ich ändere Ihren Code ein wenig, so dass der Name der Datei zu seiner ID geändert wird.

function changenametoid() { 
 
var form = FormApp.openById('formID'); 
 
var formResponses = form.getResponses(); 
 
var numResponses = formResponses.length; 
 
var lastResponse = formResponses[numResponses - 1]; 
 
var lastResponseItem = lastResponse.getItemResponses();  
 
var submittedID = lastResponseItem[0].getResponse(); 
 
var file = DriveApp.getFileById(submittedID); 
 
var oldFileName = file.getName(); 
 
var indexOldFileName = oldFileName.indexOf("-"); 
 
var newFileName = submittedID; 
 
var indexOldFileExt = oldFileName.lastIndexOf("."); 
 
var newFileExt = oldFileName.slice(indexOldFileExt); 
 
var modName = newFileName + newFileExt; 
 
file.setName(modName); 
 
}