2016-05-21 8 views
0

Je suis une recrue totale, alors s'il vous plaît pardonnez-moi si c'est un 'duh'.Easy one: le script "Create Folder" écrase ses entrées précédentes

J'ai modifié un script afin de créer un nouveau dossier Gdrive pour chaque formulaire soumis. Le problème est que chaque fois que le script s'exécute, il recrée un dossier pour chaque ligne de la feuille de calcul. Qu'est-ce que je rate?

function folderMaker(){ 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1'); 
var last = sheet.getLastRow();//end of roster size 

Logger.log('last '+last); 
for(var i=2;i<last+1;i++){ 

var TimeStamp = sheet.getRange(i,1).getValue();//get timestamp code 
var eLastName = sheet.getRange(i,39).getValue();//get Employee's Last NameID 
var eFirstName = sheet.getRange(i,40).getValue();//get Employee's Last NameID 
var eID = sheet.getRange(i,38).getValue();//get Employee's Last NameID 
var folder = DriveApp.createFolder(eLastName + ' ' + eFirstName + ' - ' + eID + ' ('+TimeStamp + ')'); 
var aFolder = folder.getName(); 
var aFolderId = folder.getId(); 
var aFolderUrl = folder.getUrl(); 
sheet.getRange(i, 82).setValue(aFolder); 
sheet.getRange(i, 83).setValue(aFolderId); 
sheet.getRange(i, 84).setValue(aFolderUrl); 

//Add analyst folders to HRC folder 
var HRCFolderID = '[insert form id]' 
var HRCFolder = DriveApp.getFolderById(HRCFolderID); 

var analystFolder = DriveApp.getFolderById(aFolderId); 

HRCFolder.addFolder(analystFolder);//put analyst folder in HRC folder 

DriveApp.getRootFolder().removeFolder(analystFolder);//take analyst folder out of Google Drive 
+0

Vous n'avez pas besoin d'une boucle 'for'. Vous devez avoir un déclencheur "Soumission sur formulaire" dans votre feuille de calcul qui obtient les valeurs de la soumission de formulaire, puis crée le dossier. Pas besoin d'obtenir ou de parcourir toutes les valeurs de la feuille de calcul. Vous pouvez utiliser la propriété 'values' de l'objet événement pour obtenir ces valeurs de soumission de formulaire. [Documentation sur les scripts d'applications - Objet d'événement - Feuille - Soumission d'un formulaire] (https://developers.google.com/apps-script/guides/triggers/events#form-submit) –

+0

Merci pour votre réponse Sandy! Malheureusement, je ne suis pas assez versé pour appliquer ce dont vous parlez ici. J'ai un déclencheur On Form Submit sur ceci, mais je ne suis pas sûr de ce qui fait que le script boucle. C'est littéralement la première fois que j'ai modifié un script dans cette mesure. – Marvin

+0

Nevermind! Je l'ai! Merci beaucoup. – Marvin

Répondre

0

Après réception d'une entrée de sable que la commande for déclenche une boucle, je l'ai enlevé et modifié le code se concentrer uniquement sur la dernière ligne. À présent, en combinaison avec le déclencheur Envoi de formulaire sur formulaire, chaque fois qu'un formulaire arrive, un dossier et une URL vers le dossier sont créés. Code révisé ci-dessous:

function folderMaker(){ 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1'); 
    var last = sheet.getLastRow();//end of roster size 

Logger.log('last '+last);{ 

var TimeStamp = sheet.getRange(last,1).getValue();//get timestamp code 
var eLastName = sheet.getRange(last,39).getValue();//get Employee's Last NameID 
var eFirstName = sheet.getRange(last,40).getValue();//get Employee's Last NameID 
var eID = sheet.getRange(last,38).getValue();//get Employee's Last NameID 
var folder = DriveApp.createFolder(eLastName + ' ' + eFirstName + ' - ' + eID + ' ('+TimeStamp + ')'); 
var aFolder = folder.getName(); 
var aFolderId = folder.getId(); 
var aFolderUrl = folder.getUrl(); 
sheet.getRange(last, 82).setValue(aFolder); 
sheet.getRange(last, 83).setValue(aFolderId); 
sheet.getRange(last, 84).setValue(aFolderUrl); 

//Add analyst folders to HRC folder 
var HRCFolderID = '[insert form id]' 
var HRCFolder = DriveApp.getFolderById(HRCFolderID); 

var analystFolder = DriveApp.getFolderById(aFolderId); 

HRCFolder.addFolder(analystFolder);//put analyst folder in HRC folder 

DriveApp.getRootFolder().removeFolder(analystFolder);//take analyst folder out of Google Drive 
} 

}