Problème de format
Publié : 08 août 2024 14:47
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]
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]