Connection avec Drive et importation "auto" ?

ohhhhh Génial

milles merci pour ta patience

et merci encore

Hello je reviens faire un petit bonjour sur ce sujet !

pour rappel, j'utilise principalement cette partie du script :

function lireCSV(){
  f.clear();
  SpreadsheetApp.getActiveSpreadsheet().setActiveSheet(f);
  var fichierId = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('LOYERS').getRange('B3').getValue();
  lireCsvFromId(fichierId)
}

function lireCsvFromId(id) {
  var result = []
  var csv = DriveApp.getFileById(id).getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csv);
  var num1 = parseInt(id1)
  var num2 = parseInt(id2)
  for (var i = 0; i < csvData.length; i++) {
    //if(idX.indexOf(csvData[i][0])!=-1 || csvData[i][0]=='Investor'){
    if(parseInt(csvData[i][0])==num1 || parseInt(csvData[i][0])==num2 || csvData[i][0]=='Investor'){
      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]!=''){flag = true}
      }
      if (flag) {newResult.push(result[i])}
    }
    var n = f.getLastRow()+1;
    f.getRange(n, 1, 1, 1).setValue(id);
    f.getRange(n+1, 2, newResult.length, newResult[0].length).setValues(newResult)
  }catch(e){

  }
  SpreadsheetApp.flush();
}

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

qui me retourne ceci, suite a la lecture d'un .CSV ( encore une fois que c'est pratique ! je pense que je dirais jamais assez merci !! )

capture

si je chipote un peu j'ai 2 suggestions.

** Est-ce possible de ne pas inclure dans ces données ce qui est égale a "0" ?

** impossible de convertir en $ ces chiffres, si il y a quelque chose de possible également, je prend !

merci :D

wahoo, sujet ancien ...

** Est-ce possible de ne pas inclure dans ces données ce qui est égale a "0" ?

essaie de remplacer ceci

if(result[i][j]!=''){flag = true}

par

if(result[i][j]!='' && result[i][j]!=0){flag = true}

** impossible de convertir en $ ces chiffres, si il y a quelque chose de possible également, je prend !

essaie de changer les paramètres régionaux et passe en "US"

oui sujet ancien :) j'ai 2 ou 3 petites questions alors je déterre les sujets plutôt qu'en faire des nouveaux

essaie de changer les paramètres régionaux et passe en "US"

oui j'y ai pensé, tout ce que j'ai déjà va s'adapter ? ou ça va perturber ce que j'ai déjà ? [edit : c'est bon, top !]

et je te donne le résultat pour le remplacement :

PAR-FAIT ! merci :D

Bonjour !

En rapport avec ce sujet : https://forum.excel-pratique.com/sheets/dernier-challenge-comparatif-reel-simulation-160200

est-il possible d'inclure dans ce script un élément pour remplacer cette formule ? (histoire de gratté une étape sur ce que je voudrais faire)

=REGEXREPLACE(..................," - REINVEST| - DEPOSIT| - TOTAL","")

merci

ah, j'avais pas trop suivi l'autre post ... je regarde

il faut intervenir ici

result.push(csvData[i])

essaie ceci

result.push( csvData[i].replace(" - REINVEST","").replace(" - DEPOSIT","").replace(" - TOTAL","") )

ça ne fonctionne pas, mais j'ai que ça comme erreur

TypeError: csvData[i].replace is not a function

peux-tu me redonner le fichier csv je ne sais plus où il est, peut-être en mp ?

Désolé,

ça ne fonctionne pas, mais j'ai que ça comme erreur

TypeError: csvData[i].replace is not a function

en effet ! csvData[i] représente une ligne complète

dans ce cas

    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(" - TOTAL","").replace(" - DEPOSIT","").replace(" - REINVEST","")
        }
      }
      result.push(csvData[i]);
    }

corrigé dans le fichier test

Merci :) je vais pouvoir retourner sur l'autre sujet pour bricoler un peu 😄

Bonjour, encore un petit déterrage de sujet pour éviter les doublons

Pour rappel, voici le script utilisé

function lireCSV(){
  f.clear();
  SpreadsheetApp.getActiveSpreadsheet().setActiveSheet(f);
  var fichierId = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PORTFOLIO').getRange('T21').getValue();
  var output = [];
  lireCsvFromId(fichierId)

}

function lireCsvFromId(id) {
  var result = []
  var csv = DriveApp.getFileById(id).getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csv);
  var num1 = parseInt(id1)
  var num2 = parseInt(id2)
  for (var i = 0; i < csvData.length; i++) {
    //if(idX.indexOf(csvData[i][0])!=-1 || csvData[i][0]=='Investor'){
    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(" - TOTAL","").replace(" - DEPOSIT","").replace(" - REINVEST","")
        }
      }
      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 n = f.getLastRow()+1;
    f.getRange(n, 1, 1, 1).setValue(id);
    f.getRange(n+1, 2, newResult.length, newResult[0].length).setValues(newResult)
  }catch(e){

  }
  SpreadsheetApp.flush();
}

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

j'aimerai inclure quelque chose comme ceci ( ou du même genre )

var output= [ ];

if (output.length > 0) {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
    try {
      sheet.getRange(3, 13, sheet.getLastRow(1000), sheet.getLastColumn(5)).clearContent();
    } catch (e) { }
    sheet.getRange(3,13, output.length, output[0].length).setValues(output).sort({ column: 17, ascending: false })
  }

afin de choisir la zone exact ou le script s'exécutera.

mais je me suis perdu en essayant plusieurs chose, sans résultat !

j'ai besoins d'une personne avec une lampe de poche pour m'éclairer

Merci a vous !

initialement, on était comme ceci

    var n = f.getLastRow()+1;
    f.getRange(n,   1, 1, 1).setValue(id);
    f.getRange(n+1, 2, newResult.length, newResult[0].length).setValues(newResult)

pour le mettre ailleurs,

  • pour le premier terme c'est compliqué car on empile les résultat, le plus simple est de mettre un commentaire en ligne x, et la copie se fera à partir de la ligne x+1
  • pour le second terme (1 ou 2) mets la colonne adhoc

pour le mettre ailleurs,

pour le premier terme c'est compliqué car on empile les résultat, le plus simple est de mettre un commentaire en ligne x, et la copie se fera à partir de la ligne x+1

pour le second terme (1 ou 2) mets la colonne adhoc

Oui j'avais déjà joué avec ces colonnes/lignes.

le problème c'est qu'a chaque activations du script, j'ai également toute ma page que se "reset" alors que le script génère des données que sur 4 colonnes

d'ailleurs la 1ere colonne avec l'ID du fichier, je ne sais pas si c'est obligatoire qu'elle soit présente au moment du résultat de l'exécution si jamais..

image

j'aimerai bien pouvoir "balader" mes 3 colonnes ( Investir, adresse 1 et adresse 2 ) n'importe ou dans mes feuilles sans me préoccuper de mes autres données autour.

d'ailleurs je me rends compte en relisant au dessus, que je n'avais pas "réinitialisé" complément le script avant de le mettre ici.. il n'etait donc pas completement correct"

le voici :

const id1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TEST').getRange('A3').getValues()
const id2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TEST').getRange('A2').getValues()
const f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TEST1');

function lireCSV(){
  f.clear();
  SpreadsheetApp.getActiveSpreadsheet().setActiveSheet(f);
  var fichierId = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TEST').getRange('A1').getValue();
  lireCsvFromId(fichierId)
}

function lireCsvFromId(id) {
  var result = []
  var csv = DriveApp.getFileById(id).getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csv);
  var num1 = parseInt(id1)
  var num2 = parseInt(id2)
  for (var i = 0; i < csvData.length; i++) {
    //if(idX.indexOf(csvData[i][0])!=-1 || csvData[i][0]=='Investor'){
    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(" - TOTAL","").replace(" - DEPOSIT","").replace(" - REINVEST","")
        }
      }
      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 n = f.getLastRow()+1;
    f.getRange(n, 1, 1, 1).setValue(id);
    f.getRange(n+1, 2, newResult.length, newResult[0].length).setValues(newResult)
  }catch(e){

  }
  SpreadsheetApp.flush();
}

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

Pour ne pas reseter la feuille, supprime

f.clear();

si tu ne veux pas l'id, supprime

f.getRange(n, 1, 1, 1).setValue(id);

si tu ne veux pas l'id, supprime

f.getRange(n, 1, 1, 1).setValue(id);

Merci,

Pour ne pas reseter la feuille, supprime

f.clear();

je me suis mal exprimé..

je ne veux pas que ça efface ma feuille entière,

en revanche si le script génère des données sur la plage A2:G par ex, j'aimerai bien que ça écrase ces données la

j'espère que je suis clair dans mes explications ^^

d'où mon exemple avec le bout de script plus haut avec le "output " . les scripts que j'utilise avec ce format permettent cette utilisation

( mais si ce n'est pas possible, c'est pas possible ^^ )

Dans ce cas, (à main levée, sans avoir testé), essaie quelque chose comme

f.getRange('A2:G'+f.getLastRow()).clearcontent()

Dans ce cas, (à main levée, sans avoir testé), essaie quelque chose comme

f.getRange('A2:G'+f.getLastRow()).clearcontent()

il fallait le placer ou ?

j'ai eu que des retours "....is not a function..."

j'ai refait un petit .doc

https://docs.google.com/spreadsheets/d/1xlAeRUTX47-cAR4SRFmusLy3EmP3mmxNhfYrhOyoOqg/edit?usp=sharing

je continue mes essais :D

bonne soirée !

Trouvé ! ( enfin ça me semble correct, et les attentes sont respectées, et surtout ça fonctionne ahah )

const id1 = "adresse 1"
const id2 = "adresse 2"
const f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("feuille");
const f1 = SpreadsheetApp.getActiveSpreadsheet().getRange('A2:C')

function lireCSV(){
  f1.clear();
  SpreadsheetApp.getActiveSpreadsheet().setActiveSheet(f);
  var fichierId = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('feuille').getRange('A1').getValue();
  lireCsvFromId(fichierId)
}

function lireCsvFromId(id) {
  var result = []
  var csv = DriveApp.getFileById(id).getBlob().getDataAsString();
  var csvData = Utilities.parseCsv(csv);
  var num1 = parseInt(id1)
  var num2 = parseInt(id2)
  for (var i = 0; i < csvData.length; i++) {
    //if(idX.indexOf(csvData[i][0])!=-1 || csvData[i][0]=='Investor'){
    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(" - TOTAL","").replace(" - DEPOSIT","").replace(" - REINVEST","")
        }
      }
      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])}
    }
    f.getRange(2, 1, newResult.length, newResult[0].length).setValues(newResult)
  }catch(e){
  }
  SpreadsheetApp.flush();
}

function transpose(a){
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
Rechercher des sujets similaires à "connection drive importation auto"