web-dev-qa-db-fra.com

Comment ajouter des données actualisées à une nouvelle colonne dans Google Sheets

Je suis en train de créer une application Google Sheets qui lit la colonne A avec un symbole boursier et place le prix dans la colonne de droite à l'aide de = GOOGLEFINANCE

J'ai ce rafraîchissement tous les jours et en ajoutant à la colonne entre A et B avec son code de date en B1.

À chaque actualisation, les données sont copiées, contrairement aux nouvelles données ajoutées. Il semble que cela ajoute la formule elle-même à la feuille de calcul, par opposition à la valeur elle-même.

screen shot

Voici mon code

function myFunction() {
  SpreadsheetApp.getActiveSheet().insertColumns(2);
  SpreadsheetApp.getActiveSheet().getRange('B1').setValue('=now()');
  SpreadsheetApp.getActiveSheet().getRange('B2:B10').setValue('=iferror(GOOGLEFINANCE(A2:A10,"price"),"")');
}
2
Michael Smith

À chaque actualisation, les données sont copiées, contrairement aux nouvelles données ajoutées. Il semble que cela ajoute la formule elle-même à la feuille de calcul, par opposition à la valeur elle-même.

Si je comprends bien, vous voulez que les colonnes conservent un "instantané" des prix au moment de l'ajout de la colonne, au lieu que les valeurs continuent à se mettre à jour.

Pour ce faire, nous pouvons remplacer les formules par les valeurs calculées au moment de "geler" les valeurs:

// select the range you want to "freeze":
var range = SpreadsheetApp.getActiveSheet().getRange('B:B');

// replace the cell formulas with the calculated values:
range.setValues(range.getValues());

Je l'ai testé manuellement avec la fonction GOOGLEFINANCE et elle l'a remplacée par le prix actuel sous forme de valeur numérique. Vous pouvez ajouter ceci à la fin de votre fonction pour "geler" les prix après les avoir obtenus.

Une autre solution pourrait être d'utiliser le paramètre start_date de la fonction GOOGLEFINANCE] . Vous pouvez obtenir la date actuelle sous forme de valeur, puis la transférer dans la formule sous le nom de start_date afin que le prix correspondant soit toujours recherché.

2
Christopher Su