Convertir des fichiers Excel en CSV UTF-8 avec Google Apps Script : un gain de temps et d’efficacité
Lorsque vous travaillez avec des fichiers CSV pour un traitement automatisé ou une intégration dans d’autres systèmes, deux problématiques majeures peuvent se poser :
- Le formatage du fichier CSV : passer à l’encodage UTF-8 pour une compatibilité universelle.
- Le traitement en masse : récupérer automatiquement tous les fichiers d’un dossier Google Drive.
Dans cet article, nous allons explorer un script Google Apps Script conçu pour répondre à ces besoins, avec un focus particulier sur :
- L’encodage UTF-8 des fichiers CSV générés.
- La gestion automatique de tous les fichiers d’un dossier Drive.
- Le formatage adapté pour les environnements francophones (virgule comme séparateur décimal et point-virgule pour les colonnes).
Pourquoi choisir l’encodage UTF-8 ?
L’UTF-8 est le standard mondial pour l’encodage des fichiers texte. Il garantit :
- Une compatibilité optimale avec les applications modernes.
- La prise en charge des caractères spéciaux, comme les accents (é, è, à) essentiels pour le français.
- L’absence de conflits lors de l’importation dans des bases de données ou d’autres logiciels.
Fonctionnalités principales du script
Notre script permet de :
- Récupérer tous les fichiers Excel d’un dossier Drive et les traiter automatiquement.
- Convertir les fichiers Excel en CSV encodés en UTF-8.
- Nettoyer et formater les données :
- Suppression des espaces inutiles.
- Remplacement du point par une virgule comme séparateur décimal.
- Générer des fichiers CSV adaptés aux environnements francophones avec un séparateur de colonnes point-virgule.
- Marquer les fichiers Excel traités pour éviter les doublons.
Le code du script
Voici le script complet et détaillé :
function convertirExcelEnCSV() { const dossierId = "ID_DU_DOSSIER"; // Remplacez par l'ID de votre dossier Google Drive const dossier = DriveApp.getFolderById(dossierId); const fichiers = dossier.getFiles(); Logger.log("Début de la conversion des fichiers Excel en CSV dans le dossier ID : " + dossierId); while (fichiers.hasNext()) { const fichier = fichiers.next(); const fichierNom = fichier.getName(); Logger.log("Traitement du fichier : " + fichierNom); // Vérifiez si le fichier a déjà été traité if (fichierNom.startsWith("TRAITÉ_")) { Logger.log("Fichier déjà traité : " + fichierNom); continue; // Passer au fichier suivant } // Vérifier si le fichier est un Excel const mimeType = fichier.getMimeType(); Logger.log("MIME type du fichier : " + mimeType); if (mimeType === MimeType.MICROSOFT_EXCEL || mimeType === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { try { const fichierBlob = fichier.getBlob(); Logger.log("Blob du fichier récupéré avec succès : " + fichierNom); // Convertir le fichier Excel en Google Sheets const fichierSheets = convertirEnGoogleSheetAvecAPIv3(fichierBlob, fichierNom); Logger.log("Fichier converti en Google Sheets : " + fichierSheets.getName()); // Lire les données de la première feuille const feuille = fichierSheets.getSheets()[0]; const donnees = feuille.getDataRange().getValues(); Logger.log("Données brutes lues : " + JSON.stringify(donnees)); // Nettoyer les données const donneesNettoyees = donnees.map(ligne => ligne.map(cellule => { if (typeof cellule === "number") { // Convertir les nombres au format français (virgule comme séparateur décimal) return cellule.toFixed(2).replace(".", ","); } else if (typeof cellule === "string") { return cellule.trim().replace(/\s+/g, " "); // Supprimer les espaces excessifs } else { return cellule || ""; // Remplacer null/undefined par une chaîne vide } }) ); Logger.log("Données nettoyées : " + JSON.stringify(donneesNettoyees)); // Créer un contenu CSV avec point-virgule comme séparateur const contenuCSV = donneesNettoyees.map(ligne => ligne.join(";")).join("\n"); Logger.log("Contenu CSV généré :\n" + contenuCSV); const nouveauFichierNom = fichierNom.replace(/\.\w+$/, "") + ".csv"; // Créer et sauvegarder le fichier CSV const nouveauFichier = dossier.createFile(nouveauFichierNom, contenuCSV, MimeType.CSV); Logger.log("Fichier CSV créé : " + nouveauFichier.getName() + " (ID : " + nouveauFichier.getId() + ")"); // Supprimer le fichier temporaire Google Sheets DriveApp.getFileById(fichierSheets.getId()).setTrashed(true); Logger.log("Fichier temporaire supprimé : " + fichierSheets.getName()); // Renommer le fichier Excel pour marquer qu'il a été traité fichier.setName("TRAITÉ_" + fichierNom); Logger.log("Fichier original renommé : " + fichier.getName()); } catch (e) { Logger.log("Erreur lors du traitement du fichier " + fichierNom + " : " + e.message); } } else { Logger.log("Fichier ignoré : " + fichierNom + " (type non supporté)"); } } Logger.log("Fin de la conversion des fichiers Excel en CSV."); } // Fonction pour convertir un fichier Blob en Google Sheets via l'API Drive v3 function convertirEnGoogleSheetAvecAPIv3(blob, nomFichier) { const boundary = "-------314159265358979323846"; const delimiter = "\r\n--" + boundary + "\r\n"; const closeDelimiter = "\r\n--" + boundary + "--"; const metadata = { name: nomFichier, mimeType: MimeType.GOOGLE_SHEETS }; const multipartRequestBody = delimiter + "Content-Type: application/json; charset=UTF-8\r\n\r\n" + JSON.stringify(metadata) + delimiter + "Content-Type: " + blob.getContentType() + "\r\n" + "Content-Transfer-Encoding: base64\r\n\r\n" + Utilities.base64Encode(blob.getBytes()) + closeDelimiter; const options = { method: "post", contentType: "multipart/related; boundary=" + boundary, payload: multipartRequestBody, headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() } }; const response = UrlFetchApp.fetch( "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsAllDrives=true", options ); const file = JSON.parse(response.getContentText()); return SpreadsheetApp.openById(file.id); }
Personnalisation du script
- ID du dossier Drive : Remplacez ID_DU_DOSSIER par l’ID du dossier contenant vos fichiers Excel.
- Formatage des données : Adaptez le nettoyage ou le formatage en fonction des besoins spécifiques.
Avantages de ce script
- Encodage UTF-8 natif : Garantit la compatibilité internationale.
- Automatisation totale : Convertit tous les fichiers Excel d’un dossier sans intervention manuelle.
- Adaptation au contexte francophone : Utilisation d’une virgule comme séparateur décimal et d’un point-virgule pour les colonnes.
Ce script est une solution puissante pour gérer efficacement vos fichiers Excel et les convertir en CSV formatés pour des systèmes exigeants. L’encodage UTF-8 et l’automatisation de la gestion des fichiers en font un outil essentiel pour les professionnels.
Essayez-le, et n’hésitez pas à partager vos retours ou à demander des ajustements spécifiques ! 😊