Vérifier dans un script l'existence d'une feuille nommée
Je souhaite créer autant d'onglets que d'entrées présentes en colonne A d'un onglet de mon fichier : j'ai un script qui fonctionne.
Le seul défaut actuellement est que je suis amené à ajouter des nouvelles entrées dans cette liste au cours du temps or quand je lance mon script, si j'ai déjà un onglet existent, j'obtiens un message d'erreur.
J'imagine que pour contourner ce problème, il faudrait que je teste si le nouveau nom existe déjà mais je ne sais pas comment je peux procéder.
merci d'avance.
//---FONCTION POUR CREER UN ONGLET PAR CLUB (supprimé par la suite)z
function creationOnglet() {
const wbk = SpreadsheetApp.getActiveSpreadsheet();
const shModeleClub = wbk.getSheetByName('Modele');
const shListePoule = wbk.getSheetByName('liste_poule');
let shPouleLastRow = shListePoule.getLastRow();
let liste_club = shListePoule.getRange(2, 1, shPouleLastRow -1, 1).getValues(); //la liste des clubs débute en A3
console.log(liste_club);
let valeurClub = liste_club.filter(String).length+1;
console.log(valeurClub);
let nouveaunom;
for (let i=1;i<valeurClub;i++){
if (shModeleClub !== null) {
shModeleClub.activate();// make this sheet active
wbk.duplicateActiveSheet();
}
let nom_club = shListePoule.getRange(i+1,1);
nouveaunom = nom_club.getValue();
console.log(nom_club.getValue());
let feuilleRenommer = wbk.getSheetByName('Copie de Modele');
let feuilleINitiale = wbk.getSheetByName('Modele')
feuilleRenommer.setName(nouveaunom);
//Logger.log(shModeleClub.getName());
}
//Browser.msgBox('Les onglets clubs ont bien été créées !');
}Bonjour,
C'est possible en vérifiant le retour de la fonction getSheetByName
Elle renvoie null si la feuille spécifiée n'existe pas. CF. l'exemple donné par Google.
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet?hl=fr#getSheetByName(String)je ne sais pas pourquoi le site bugue complètement avec l'insertion du lien...
+1 @saboh
1 - Il faut mettre dans une variable tous les noms des onglets.
2 - il faut mettre dans une variable toutes les entrées de ta colonne A
3 - il faut boucler sur les entrées de ta colonne A et vérifier si un onglet existe déjà
> si oui : PASS
> si non : on crée l'onglet
Je ne comprends pas trop le lien entre ton énonce et le script partagé, mais voici ci-dessous un script faisant les étapes que j'ai précédemment listées :
function creatSheetsFromList() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // fichier Sheets ouvert
var sheetNames = ss.getSheets().map(sheet => sheet.getName()); // noms de tous les onglets du fichier
var listSheet = ss.getSheetByName("Liste Onglets"); // l'onglet où tu as des onglets colonne A
var ongletValues = listSheet.getRange(1, 1, listSheet.getLastRow()).getValues(); // liste de tes onglets créés ou à créer
ongletValues.forEach(function(row) { // on itère à travers la liste des onglets
var ongletName = row[0]; // Nom de l'onglet (colonne A)
if (ongletName && sheetNames.indexOf(ongletName) === -1) {// Si l'onglet n'existe pas, le créer
ss.insertSheet(ongletName);
}});
}Salut Pierre,
Cela permet d'éviter la création + affectation de la variable sheetNames. Une implémentation pourrait etre, en reprenant ton code :
function creatSheetsFromList() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // fichier Sheets ouvert
var listSheet = ss.getSheetByName("Liste Onglets"); // l'onglet où tu as des onglets colonne A
var ongletValues = listSheet.getRange(1, 1, listSheet.getLastRow()).getValues(); // liste de tes onglets créés ou à créer
ongletValues.forEach(function(row) { // on itère à travers la liste des onglets
var ongletName = row[0]; // Nom de l'onglet (colonne A)
if (ss.getSheetByName(ongletName) == null) { // Si l'onglet n'existe pas, le créer
ss.insertSheet(ongletName);
}
});
}Encore plus simple
Bonjour,
Merci pour le retour. Je me rends compte que mon code initial est vraiment assez brut (je fais avec mes propres moyens) : j'en apprends tous les jours.
Petite question : si j'ai un en-tête dans la colonne A (qui contient la liste des onglets), comment je dois modifier le code pour ne boucler qu'à compter de la ligne 2 ?