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 ! 😊