Enregistrement de données hébdomadaire

Bonjour à tous,

Suite de mon sujet concernant la partie "enregistrement"

Rappel :

je dispose de nouvelles données au format .csv chaque semaines.

Voici le script que j'utilise, pour le moment, pour extraire les plages qui m'intéresse :

function lireCsvRentFromId(id) {

  var id = "ID CSV"
  var id1Csv= "Adresse 1"
  var id2Csv= "Adresse 2"
  var feuilleCsv = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("csv");
  var cellReset = feuilleCsv.getRange('A:C')
  var cellformat = feuilleCsv.getRange('B1:C')
  var result = []
  var csv = DriveApp.getFileById(id).getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csv);
  var num1 = parseInt(id1Csv)
  var num2 = parseInt(id2Csv)

  cellReset.clear();

  for (var i = 0; i < csvData.length; i++) {
    if(parseInt(csvData[i][0])==num1 || parseInt(csvData[i][0])==num2 || csvData[i][0]=='Investor'){
      if (csvData[i][0]=='Investor'){
        for (var ii=0;ii<csvData[i].length;ii++){
          csvData[i][ii]=csvData[i][ii].replace(" - X","").replace(" - X","").replace(" - X","").replace(" Rmm","").replace("X-","")
        }
      }
      result.push(csvData[i]);
    }
  }
  try{
    result = transpose(result)
    var newResult = []
    for (var i=0;i<result.length;i++){
      var flag = false
      for (var j=1;j<result[0].length;j++){
        if(result[i][j]!='' && result[i][j]!=0){
          flag = true
        }
      }
      if(flag){
        newResult.push(result[i])

      }
      var final = newResult.slice(1)
    }
    feuilleCsv.getRange(1, 1, final.length, final[0].length).setValues(final)
    cellformat.setNumberFormat('$0.000000')
  }catch(e){
  }
  SpreadsheetApp.flush();
}

function transpose(a){
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
image

Ensuite je fais un peu de nettoyage sur le CSV pour additionner les lignes et colonnes avec ce script :

function tri() {
  var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('csv');
  var lastRow = feuille.getLastRow();
  var cellformat = feuille.getRange('F:F')
  var cellReset = feuille.getRange('E:F')
  var plage = feuille.getRange('A1:C' + lastRow).getValues().slice(0);
  var array = []

  cellReset.clear();

  plage.forEach(r => {
    var sum = 0
    r.forEach((c, i) => {if (i > 0) { sum = +sum + c*1 }})
    array.push([r[0], sum])
  })
  var result = sum2D(array)
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('csv').getRange(1, 5, result.length, result[0].length).setValues(result)
  cellformat.setNumberFormat('$0.000000')
}

function sum2D(a) {
  var s = [], x = new Map()
  a.forEach(function (r) {
    if (x.has(r[0])) { x.set(r[0], (+x.get(r[0]) + r[1]*1)) }
    else { x.set(r[0], r[1]) }
  })
  x.forEach(function (value, key) { s.push([key, value]) })
  return s.sort()
}
image

Maintenant j'aimerai pouvoir conserver ces données sur un tableau qui serait alimenté chaque semaines.

==> ça se passe toujours ici https://docs.google.com/spreadsheets/d/1jSJEMH16orgopMxkgIUWrrntngJnpc89Ya-Wjw8V4gg/edit?usp=sharing

merci

image

Voici le schéma concernant ce que j'aimerai. à savoir reporter les valeurs semaines après semaines & intégrer tout dans un tableau unique.

Voici une aide extérieur obtenue à ce sujet.

  function test(){

  const s = SpreadsheetApp.getActiveSheet(); //<<< sheet with BOTH CSV table and archive table must be active when the script is run
  const data = s.getDataRange().getValues();
  data.shift();
  const csvData = data.map(x => x.slice(4,6)); // <<< CSV data in Columns E & F
  let lblData = data.map(x => x[7]); // <<< archive labels are in H
  if (lblData[0]==null) lblData = data.slice(0,5).map(x => x[4]);
  while (lblData[lblData.length-1]=='') lblData.pop();
  let newCol = data[0].length+1;
  if (newCol<9) newCol=9;
  let outData = [];
  let outMap = {};
  for (let i in [1,2,3,4,5]) outData.push(csvData.shift()[1]);
  for (i in csvData) outMap[csvData[i][0]] = csvData[i][1]; // <<< all current names and values
  for (i=5; i<lblData.length; i++) {
    if (outMap[lblData[i]==null]) outData.push("");
    else {
      outData.push(outMap[lblData[i]]);
      delete outMap[lblData[i]];
    }
  }
  for (i in outMap) {
    lblData.push(i);
    outData.push(outMap[i]);
  }
  s.getRange(2, 8, lblData.length).setValues(lblData.map(x => [x])); // <<< Note
  s.getRange(2, newCol, outData.length).setValues(outData.map(x => [x]));
}

je laisse ici pour clôturer ce sujet ( même si je vais essayer de comprendre ce script qui est complexe x10000 pour moi )

Rechercher des sujets similaires à "enregistrement donnees hebdomadaire"