Page 1 sur 1

Problème de format

Publié : 08 août 2024 14:47
par CCGGDDJJ12345
Bonjour, 

J'ai créé un script pour le besoin suivant : 

- Je reçois tout les jours sur mon mail un courrier qui comporte une pièce jointes au format Microsoft Excel CSV File, avec comme séparateur une tabulation. (chaque données se trouve dans une cellule) 
csv.PNG
csv.PNG (9.59 Kio) Consulté 692 fois
- Je veux que que cette pièce jointe passe du format csv au format excel ou Google sheet, que son contenu soit collé tout les jours dans le google sheet oú se trouve mon code, a la suite des ligne collées les jours précédent.

Le code : function importerEtConvertirCSV() {

  // Chercher les message avec l'objet xxxxxxxxxxxxxx
  var threads = GmailApp.search('subject:"xxxxxxxxxxxxxx"');
  if (threads.length > 0) {
    var thread = threads[0]; 
    var messages = thread.getMessages();
    var message = messages[messages.length - 1]; // Dernier message

    // Verifier si le message a une pièce jointe
    var attachments = message.getAttachments();
    if (attachments.length > 0) {
      var csvBlob = attachments[0].getDataAsString('ISO-8859-1');

      // Ecrire les données CSV dans la feuille
      var spreadsheetId = "1lNZUazPaNnLHRcJ0cLoFvhYSPlZhbemM13SjZEzD-jE";
      var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
      var sheet = spreadsheet.getActiveSheet();

      // Obtenir la dernière ligne avec données dans la colonne A
      var lastRow = sheet.getLastRow();

      // Ecrire les données dans la ligne suivante, sans coller la première ligne du CSV (en-tête)
      var data = csvBlob.split('\n');
      for (var i = 1; i < data.length; i++) { 
        var rowData = data.trim().split('\t');

        // Verifier si la ligne est vide
        if (rowData.every(cell => cell !== "")) {
          sheet.getRange(lastRow + i, 1, 1, rowData.length).setValues([rowData]);
        }
      }
      // Marquer le message comme lu 
      message.markRead();
    }
  }
}


Le code marche, sauf un détail qui a son importance : le format. Les données se colle de cette manière (voir photo) :
error 4.PNG
error 4.PNG (39.08 Kio) Consulté 692 fois
Je débute dans l'écriture de script, j'ai beaucoup cherché comment résoudre cela sans succès. Si quelqu'un à la réponse, n'hésitez pas à me la faire parvenir! [/i]

Re: Problème de format

Publié : 10 août 2024 10:12
par Patrick_Té
Bonjour,

Le problème vient probablement du décodage du fichier.
Il faudrait commencer par remplacer 'ISO-8859-1'    dans   var csvBlob = attachments[0].getDataAsString('ISO-8859-1'); 
par 'UTF-8'    puis par 'UTF-16' 

Cela devrait résoudre le problème.

Bon courage

Re: Problème de format

Publié : 12 août 2024 11:01
par CCGGDDJJ12345
Bonjour, 

J'ai déjà essayé de changer cela, ça ne marche pas...

Re: Problème de format

Publié : 27 août 2024 11:01
par papa s
Bonjour, 

Une piste pourrait être de convertir le CSV avant d'écrire les données.
Soit en utilisant 
var csvBlob = attachments[0];
var csvContent = Utilities.newBlob(csvBlob.getBytes(), 'text/csv', csvBlob.getName()).getDataAsString('UTF-8');


ou bien 
var csvBlob = attachments[0];
var csvContent = csvBlob.getDataAsString('UTF-8');
var csvData = Utilities.parseCsv(csvContent); 


ou encore en créant une copie du csv convertie en feuille de calcul ?