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)
- 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) :
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]
Problème de format
- CCGGDDJJ12345
- Messages : 2
- Inscription : 08 août 2024 14:31
- Patrick_Té
- Messages : 16
- Inscription : 15 janv. 2023 10:47
- Remercié : 4 fois
Re: Problème de format
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
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
- CCGGDDJJ12345
- Messages : 2
- Inscription : 08 août 2024 14:31
Re: Problème de format
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 ?
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 ?
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