# 📦 Import CSV & Excel Service (Symfony) Un service Symfony modulaire pour importer, valider et transformer automatiquement des fichiers **CSV** et **Excel** (XLS/XLSX). Idéal pour les pipelines d'importation robustes avec gestion des erreurs et validation dynamique. --- ## 🚀 Installation Ajoutez ce package via Composer : ```bash composer require sudalys/import-service ``` --- ## 📂 Fonctionnalités - ✅ Import de fichiers `.csv`, `.xls`, `.xlsx` - ⚖️ Validation dynamique des colonnes avec regex - 📊 Log des erreurs via le logger Symfony (PSR-3) - 📃 Colonne obligatoire supportée - ⚙️ Architecture extensible via des `Processor` - 🔄 Conversion automatique des `.xls` vers `.xlsx` - ❌ Suppression des colonnes vides pour éviter les erreurs de duplicat --- ## 🚀 Utilisation Voici un exemple typique dans votre contrôleur ou service d'importation : ```php if (strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) === 'xlsx' || strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) === 'xls') { $filePath = $excelTransformer->transform($filePath, 'Csv', 3); // 3 correspond à la ligne d'entête } $result = $importService->import( $filePath, $this->HeaderGeneral, $this->regexListe, $this->ColonneObligatoire, $logger ); ``` --- ## 🧑‍💻 Exemple d'Importation dans le Contrôleur Dans votre contrôleur ou service, n'oubliez pas d'importer les classes nécessaires pour utiliser le service d'importation : ```php use Sudalys\ImportService\CsvImportService; use Sudalys\ImportService\ExcelFileTransformer; ``` --- ## 🔧 Configuration attendue - `$HeaderGeneral` : tableau des en-têtes attendues (ordre et contenu exact) - `$regexListe` : tableau associatif `colonne => regex` - `$ColonneObligatoire` : tableau contenant les noms de colonnes obligatoires --- ## 🚫 Gestion des erreurs Les erreurs de validation sont automatiquement loggées via `LoggingErrorHandler` qui utilise le logger PSR-3 de Symfony. --- ## 🌐 Transformations Excel Géré via `ExcelFileTransformer` : - Conversion `.xls` → `.xlsx` - Extraction des données via `Box\Spout` - Ignorer les lignes pré-étêtées via `$headerPosition` - Formatage des dates --- ## ⚙️ Configuration du Service dans `services.yaml` Pour que le service fonctionne correctement dans Symfony, ajoutez la configuration suivante dans votre fichier `services.yaml` : ```yaml services: Sudalys\ImportService\: resource: '../vendor/sudalys/import-service/src/Service/Import/' autowire: true autoconfigure: true public: false ``` --- ## 🎓 Exigences - PHP >= 8.1 - Symfony >= 5.4 - Extensions PHP : `ext-fileinfo`, `ext-mbstring` --- ## 📄 License MIT