Problème de format

Avatar de l’utilisateur
CCGGDDJJ12345

Membre tout neuf
Messages : 2
Inscription : 08 août 2024 14:31

Problème de format

Message 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é 694 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é 694 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]
Dernière modification par CCGGDDJJ12345 le 08 août 2024 15:08, modifié 2 fois.
Avatar de l’utilisateur
Patrick_Té
Messages : 16
Inscription : 15 janv. 2023 10:47
Remercié : 4 fois

Re: Problème de format

Message 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
Avatar de l’utilisateur
CCGGDDJJ12345

Membre tout neuf
Messages : 2
Inscription : 08 août 2024 14:31

Re: Problème de format

Message par CCGGDDJJ12345 »

Bonjour, 

J'ai déjà essayé de changer cela, ça ne marche pas...
Avatar de l’utilisateur
papa s

Membre tout neuf
Messages : 3
Inscription : 10 juin 2024 17:42

Re: Problème de format

Message 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 ?
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous