Comment créer et nommer automatiquement de nouvelles feuilles dans une feuille de calcul Google à partir d'une liste de noms, telle qu'une feuille de calcul d'élève? J'aimerais que chaque nouvelle feuille soit créée lorsque j'ajoute les noms correspondants à une liste dans une colonne de feuille de calcul. Les nouvelles feuilles peuvent être dans le même tableur.
Le script suivant crée un élément de menu dans la feuille de calcul nommé Maintenance . Il y a trois options de menu présentes nommées:
Ajouter un étudiant un à un , Ajouter un étudiant à la fois (FIFO) , Ajouter un étudiant à la fois ( LIFO) , Supprimer des feuilles
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [{name: "Add Student one by one", functionName: "addSheet"},
{name: "Add Student's at once (FIFO)", functionName: "addSheets"},
{name: "Add Student's at once (LIFO)", functionName: "addSheetsLIFO"},
{name: "Delete Sheets", functionName: "delSheets"}
];
ss.addMenu("Maintenance", menuEntries);
}
Le code suivant créera une nouvelle feuille uniquement si toutes les informations sont entrées correctement. Une fois les informations saisies, sélectionnez l’étudiant à ajouter et appuyez sur Ajouter un étudiant :
function addSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var row = sh.getActiveRange().getRowIndex();
var rData = sh.getRange(row, 1, 1, 3).getValues();
if (row == 1) {
ss.toast("This is the header");
return
}
if(rData[0][0] != null || rData[0][1] != null || rData[0][2] != null) {
try {
ss.insertSheet(rData[0][2]);
ss.setActiveSheet(ss.getSheets()[0]);
sh.getRange("D"+(row)).setValue(new Date());
} catch(e) {
throw 'This student allready has a sheet. Try another sheet name.';
}
}
}
Le troisième morceau de code va créer de nouvelles feuilles, en fonction des noms des feuilles, appuyez sur Ajouter les étudiants à la fois (FIFO) :
function addSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var rData = sh.getDataRange().getValues();
var message = [];
for(var i=1, len=rData.length; i<len; i++) {
if(rData[i][3] == null || rData[i][3] == "") {
if(rData[i][0] != null || rData[i][1] != null || rData[i][2] != null) {
try {
ss.insertSheet(rData[i][2]);
ss.setActiveSheet(ss.getSheets()[0]);
sh.getRange("D"+(i+1)).setValue(new Date());
} catch(e) {
message.Push("row " + (i+1));
}
}
}
}
ss.toast("These sheets allready exist: " + message);
ss.setActiveSheet(ss.getSheets()[0]);
}
Le quatrième morceau de code créera de nouvelles feuilles, basées sur les noms des feuilles, mais en effectuant une rotation arrière, appuyez sur Ajouter les étudiants à la fois (LIFO) :
function addSheetsLIFO() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var rData = sh.getDataRange().getValues();
var message = [], i=rData.length;
while(i--) {
if(rData[i][3] == null || rData[i][3] == "") {
if(rData[i][0] != null || rData[i][1] != null || rData[i][2] != null) {
try {
ss.insertSheet(rData[i][2]);
ss.setActiveSheet(ss.getSheets()[0]);
sh.getRange("D"+(i+1)).setValue(new Date());
} catch(e) {
message.Push("row " + (i+1));
}
}
}
}
ss.toast("These sheets allready exist: " + message);
ss.setActiveSheet(ss.getSheets()[0]);
}
Le dernier script est un bonus pour supprimer toutes les feuilles créées, sauf la première feuille, appuyez sur Supprimer les feuilles :
function delSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var shs = ss.getNumSheets();
for(var i=shs-1;i>0;i--){
ss.setActiveSheet(ss.getSheets()[i]);
ss.deleteActiveSheet();
}
ss.setActiveSheet(ss.getSheets()[0]);
ss.getRange("D2:D").clear();
}
J'ai préparé un exemple de fichier pour voir ce qui se passe: Ajouter un étudiant à une nouvelle feuille.