web-dev-qa-db-fra.com

Créer et nommer automatiquement une nouvelle feuille dans Google Spreadsheet

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.

5
Anthony

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.

3
Jacob Jan Tuinstra