jeudi 2 août 2012

Utilisez la base de données ScriptDB de Google Apps Script

1 commentaires
Update : ScriptDB a été dépréciée le 15 Mai 2014 et sera supprimée le 20 Novembre 2014 !

Google lors de sa conférence Google I/O a annoncé l'arrivée d'une base de données dans les script. C'est la Class ScriptDB, on peut ainsi s'affranchir des spreadsheet pour stocker des données.
Voici quelques éléments pour se lancer avec ScriptDB.

Remplir sa base de données
Google fournit un script dans la page de présentation pour ajouter les données d'une spreadsheet à la base de données en automatique.
Petite précaution avant de lancer l'import, il faut que les titres de vos colonnes ne contiennent pas d'espaces. Donc si votre colonne se nomme "prix produits" il faut la transformer en "prixproduits" ou PrixProduits" par exemple.
Une fois cela fait il suffit d'exécuter ce script.
function addAll() {
  var spreadsheet = SpreadsheetApp.openById(ScriptProperties.getProperty('sheet') );//A modifier en fonction de comment vous voulez appeller la Spreadsheet.
  var columns = spreadsheet.getLastColumn();
  var sheet = spreadsheet.getSheetByName("NomDeLaFeuille"); //mettre le nom de votre feuille
  var data = sheet.getDataRange().getValues();
  var keys = data[0];
  var db = ScriptDb.getMyDb();
  for (var row = 1; row < data.length; row++) {
    var rowData = data[row];
    var item = {};
    for (var column = 0; column < keys.length; column++) {
      item[keys[column]] = rowData[column];
    }
    db.save(item);
  }
}
Si vous voulez garder la première ligne de ce code voici la fonction pour ajouter l'id de la spreadsheet en tant que variable du projet:
ScriptProperties.setProperty('sheet', SpreadsheetApp.getActiveSpreadsheet().getId());
A exécuter au début avec la spreadsheet ouverte.

Supprimer toutes les données
Idem Google frounit un script, le voici :
function deleteAll() {
   var db = ScriptDb.getMyDb();
   while (true) {
     var result = db.query({}); // get everything, up to limit
     if (result.getSize() == 0) {
       break;
     }
     while (result.hasNext()) {
       db.remove(result.next());
     }
   }
}
Appeler la valeur d'une colonne pour une ligne
Le dernier conseil est sur comment utiliser une valeur.
Comme c'est une base de données on peut effectuer des requêtes suivant un formatage spécifique pour ScriptDb.
Sinon pour tout sélectionner il faut faire :
  var db = ScriptDb.getMyDb();
  var result = db.query({});
Une fois cela fait on fait une boucle while qui tourne sur toutes les lignes :
while (result.hasNext()){
  var item = result.next();
  ...
}
La ligne de la base est donc maintenant dans 'item'.
Pour aller chercher la valeur d'une colonne pour cette ligne il suffit, en reprenant mon exemple du début, d'utiliser :
item.prixproduits
Supprimer une ligne de la base
Il faut dans un premier temps récupérer la ligne que l'on veut supprimer et ensuite envoyer l'instruction. Pour cela prévoyez au début dans la base de données un id unique afin de pouvoir requêter une ligne précisément en étant sur de ne pas avoir de doublon. Ce sera plus pratique même si chaque ligne dispose d'un ID que l'on peut obtenir avec la commande getId().
var db = ScriptDb.getMyDb();
var ob = db.query({MyId: 12}).next();
db.remove(ob);


Pour aller plus loin
Pour compléter ces premiers éléments pour commencer avec ScriptDb aller sur le site de Google :
  • Voir cette page pour trouver des exemples et la documentation de Google.
  • Consultez aussi l'aide car il y a des exemples pour chaque fonction : lien.

One Response so far

  1. Unknown says:

    Bonjour Stephane
    c'est l'error que j'ai trouvé quand j'ai lancer la function addALL Argument non valide : id (ligne 2, fichier "")
    je vous remercie par avance

Leave a Reply