Retour de getDataRange ... trop "complet"

Bonjour,

Je découvre Google Sheet et App Script connaissant assez bien Excel et un peu VBA. Mon 1er message sur le forum.

J'ai une feuille avec des données que je récupère de la façon suivante :

  const feuille = SpreadsheetApp.getActive().getSheetByName('xxxxxx');
  const tableVirt = feuille.getDataRange().getValues();

Cela marche trés bien mais ma feuille fait 1000 lignes et une des colonnes a une formule du genre =si(A1='';'';A2+A3). Sur l'année j'aurais besoin des 1000 lignes environ mais pour l'instant seules une centaines contiennent des données utiles. Je remarque que getDataRange me récupère ses lignes "vides" (Sûrement pas le bon terme). Y a t-il une astuce ? Une meilleure façon de récupérer mes données ?

Merci d'avance pour les conseils

Salut,

Tu peux nettoyer tes données ainsi :

  const feuille = SpreadsheetApp.getActive().getSheetByName('xxxxxx');
  var tableVirt = feuille.getDataRange().getValues();
  tableVirt = tableVirt.filter(row => row.some(cell => cell !== ''));

D'autres issues sont possibles, par exemple si tu as un tableau en 2d, tu peux compter le nombre d'occurrences en colonne 1 et adapter ta prise de donnée pour ne pas faire un getDataRange()

Par exemple en se basant sur la 1ere colonne :

  const feuille = SpreadsheetApp.getActive().getSheetByName('xxxxxx');
  const colonneA = feuille.getRange('A:A').getValues();
  const nombreDeDonnees = colonneA.filter(cell => cell[0] !== '').length;  
  const plage = feuille.getRange(1, 1, nombreDeDonnees, feuille.getLastColumn());
  const tableVirt = plage.getValues());

Bonjour Pierre,

Un grand merci pour ta réponse. J'étais effectivement arrivé empiriquement á la solution que tu proposes en 1er, Je me disais que c'était peut-être un traitement lourd. Petite question additionnelle pourquoi utiliser var au lieu de const ?

Je comprends je pense la solution 2 basée un peu sur le même principe de récupérer, trier, je vais faire quelques essais.

Encore merci

La différence entre une constante et une variable est assez simple, tu peux modifier une variable, pas une constante.

Donc, en faisant ceci :

  const tableVirt = feuille.getDataRange().getValues();
  tableVirt = tableVirt.filter(row => row.some(cell => cell !== ''));

Tu auras une erreur, car, dans un premier temps tu déclares la constante tableVirt qui contient un tableau de données (toutes les données de la page feuille)

ensuite, tu dis que tableVirt = un filtre de tableVirt où on ne conserve que les lignes où il y a des données (!== '') donc tu réécris sur tableVirt et ça, ce n'est pas possible sur une constante.

Pour cela qu'il faut déclarer une variable var, mais si tu ne veux que des constantes, il existe une solution, ne pas réécrire sur tableVirt mais re-créer une nouvelle constante :

  const tableVirt = feuille.getDataRange().getValues();
  const tableVirtClean = tableVirt.filter(row => row.some(cell => cell !== ''));

Il existe un 3eme type de déclaration, "let" c'est similaire à var, mais limité dans un scope limité {...}

Bien compris, en effet c'est logique je n'avais pas fait attention á ça. J'avais rencontré le problème et effectivement créer un autre tableau "Clean". Merci de la précision.

Cdlt

Rechercher des sujets similaires à "retour getdatarange trop complet"