web-dev-qa-db-fra.com

Enregistrer automatiquement les valeurs quotidiennes dans une nouvelle colonne

J'ai donc cette feuille de calcul que j'utilise pour contrôler Content Funnel. J'ai mis au point quelques formules pour utiliser autre chose qu'un tableau croisé dynamique. Mais pour obtenir les tendances et les alarmes que je cherche, je dois commencer à enregistrer ces données quotidiennement .. automatiquement. Ceci est la feuille de calcul:

enter image description here

Je cherche un script qui ajouterait une colonne entre les colonnes B et C, définissant la date actuelle dans la cellule C1 et complétant chaque cellule ci-dessous avec la valeur correspondante pour chaque formule dans chaque cellule.

Voici la liste des forumlas que j'utilise:

C2: =counta(Check!$J:$J)
C3: =COUNTIF(Check!$L:$L,Validation!$A$6)
C4: =COUNTIF(Check!$L:$L,Validation!$A$7)
C5: =ARRAYFORMULA(countif(Check!$L:$L&Check!$O:$O,Validation!$A$5&"") )
C6: =countif(Check!$O:$O,Validation!$A$1)
C7: =ARRAYFORMULA(countif(Check!L:L&Check!O:O,Validation!A5&Validation!A2) )
C8: =ARRAYFORMULA(countif(Check!O:O&Check!Q:Q,Validation!A1&"") )
C9: =countif(Check!Q:Q,Validation!A1)
C10: =countif(Check!Q:Q,Validation!A2)
C11: =countif(Check!T:T,Validation!A1)

Jusqu'à présent, je n'ai fait que beaucoup de choses:

function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Approval Funnel");
  var source = sheet.getRange("C2:C11");
  var values = source.getValues();
  values[0][0] = new Date();
  sheet.insertColumns(3);

Et c'est la frontière de mes connaissances en codage. Des idées?

1
Augusto LJ

Votre brouillon est très bon, mais il y a un défaut de conception: si vous insérez les valeurs entre B et C, la colonne avec les formules deviendra D. Alors, la prochaine fois que le script essaiera d'obtenir des données, mauvais endroit.

En termes simples, le source des données que vous enregistrez (c’est-à-dire la colonne avec des formules) doit rester au même endroit. Vous pouvez mettre les données historiques à droite de celle-ci. Comme ça:

function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Approval Funnel");
  var source = sheet.getRange("C2:C11");
  var values = source.getValues();
  values = [[new Date()]].concat(values);    // prepending the date to values
  sheet.insertColumnAfter(3);                // inserting AFTER column C
  SpreadsheetApp.flush();         
  sheet.getRange("D1:D11").setValues(values);
}

Je mets SpreadsheetApp.flush(); pour m'assurer que les modifications précédentes (insertion d'une colonne) sont bien effectuées avant que le script ne mette les données avec setValues.

De plus, vous avez eu une erreur dans values[0][0] = new Date(); - cette commande écraserait le 0ème élément du tableau (à savoir, le contenu de C2) avec la date. Vous vouliez préfixer la date, ce que j’ai fait en créant un nouveau tableau avec un élément, [[new Date()]], et en lui concaténant des valeurs.

1
user79865