Connection avec Drive et importation "auto" ?
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 !! )
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 ?
je viens d'en refaire un
https://docs.google.com/spreadsheets/d/1Tg7XKID1I1lqVV9tCMWVJ46K64sgoPrT_bOABQLDKfY/edit?usp=sharing
Et je viens de trouver ça a l'instant
https://dogmatix.medium.com/replace-text-in-google-spreadsheets-with-apps-script-3098218960d4
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..
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]; }); });
}