Application CLI moderne et interactive pour convertir des fichiers Excel (.xlsx, .xls) en base de données SQLite et inversement avec détection automatique des types de données.
- ✨ Interface interactive : Menus et prompts élégants avec Rich et Questionary
- 📊 Détection automatique : Scan de toutes les feuilles et détection des types de données
- 🎯 Sélection flexible : Choix des feuilles à convertir
- ⚡ Gestion des conflits : Options multiples si une table existe déjà
- 🧹 Nettoyage automatique : Noms de colonnes et tables nettoyés pour SQLite
- 🔄 Export complet : Convertit une base SQLite en fichier Excel
- 📑 Une feuille par table : Chaque table devient une feuille Excel
- 🎨 Mise en forme automatique : En-têtes stylés (gras, fond coloré)
- 📏 Colonnes auto-ajustées : Largeur optimale pour chaque colonne
- 🎯 Sélection des tables : Choix des tables à exporter
- 📈 Progression en temps réel : Barres de progression pour chaque opération
- 📝 Logging détaillé : Fichier de log complet pour chaque conversion
- 🚀 Mode batch : Option
--yespour automatiser les confirmations
- Python 3.8 ou supérieur
- pip (gestionnaire de packages Python)
- Git (pour récupérer le code)
# Cloner le dépôt
git clone https://github.com/ChuckZombie/excel-to-db.git
cd excel-to-dbWindows :
# Environnement virtuel (facultatif)
python -m venv venv
.\venv\Scripts\Activate.ps1
# Installation des bibliothèques
pip install -r requirements.txtLinux/Mac :
# Environnement virtuel (facultatif)
python -m venv venv
source venv/bin/activate
# Installation des bibliothèques
pip install -r requirements.txt💡 Note : L'utilisation d'un environnement virtuel est fortement recommandée pour isoler les dépendances du projet.
Pour pouvoir utiliser excel2db ou e2db directement :
pip install -e .Cela crée trois commandes globales :
e2db(commande ultra-courte - recommandée)excel2db(commande courte)excel-to-db(nom complet)
Utilisation :
# Au lieu de : python main.py convert
e2db convert --file data/sample_data.xlsx
# Au lieu de : python main.py info data/db/base.db
e2db info data/db/base.db
# Voir l'aide
e2db --helppython create_sample_data.pyCela créera un fichier data/sample_data.xlsx avec 4 feuilles :
- Groupes (1 lignes)
- Membres (4 lignes)
- Albums (5 lignes)
- Concerts (1000 lignes)
💡 Note : Les fichiers Excel sont créés dans le répertoire
data
Le projet utilise une structure organisée pour séparer les données :
excel-to-db/
├── data/ # Répertoire pour les fichiers de données
│ ├── *.xlsx # Fichier Excel de test
│ └── *.db # Bases de données SQLite de test
├── src/ # Code source de l'application
└── main.py # Point d'entrée
Les fichiers Excel et bases de données seront automatiquement créés/stockés dans ces répertoires.
💡 Note : Assurez-vous que l'environnement virtuel est activé s'il a été créé pour l'installation des bibliothèques.
- Windows :
.\venv\Scripts\Activate.ps1- Linux/Mac :
source venv/bin/activate
⚡ Astuce : Si vous avez installé avec
pip install -e ., vous pouvez utilisere2dbà la place depython main.py
# Mode interactif
python main.py convert
# ou : e2db convert
# Avec options
python main.py convert --file data/sample_data.xlsx --database ma_base.db
# ou : e2db convert --file data/sample_data.xlsx --database ma_base.db
# Mode automatique (accepte toutes les confirmations)
python main.py convert --file data/sample_data.xlsx --yes
# ou : e2db convert --file data/sample_data.xlsx --yes# Mode interactif
python main.py reverse
# ou : e2db reverse
# Avec options
python main.py reverse --database data/ma_base.db --output export.xlsx
# ou : e2db reverse --database data/ma_base.db --output export.xlsx
# Mode automatique (exporte toutes les tables)
python main.py reverse --database data/ma_base.db --output export.xlsx --yes
# ou : e2db reverse --database data/ma_base.db --output export.xlsx --yespython main.py info data/db/ma_base.db
# ou : e2db info data/db/ma_base.dbpython main.py version
# ou : e2db version# Aide générale
python main.py --help
# Aide pour une commande spécifique
python main.py convert --help
python main.py reverse --help
# ou avec e2db :
e2db --help
e2db convert --help
e2db reverse --help--file, -f: Chemin vers le fichier Excel--database, -d: Nom de la base de données de destination--yes, -y: Mode automatique (accepter toutes les confirmations)
--database, -d: Chemin vers la base de données SQLite--output, -o: Nom du fichier Excel de sortie--yes, -y: Mode automatique (exporter toutes les tables sans confirmation)
# Conversion simple
python main.py convert --file data/donnees.xlsx
# Conversion vers une base spécifique
python main.py convert --file data/donnees.xlsx --database ma_base.db
# Conversion automatique
python main.py convert --file data/donnees.xlsx --database ma_base.db --yes# Export simple
python main.py reverse --database data/ma_base.db
# Export vers un fichier spécifique
python main.py reverse --database data/ma_base.db --output backup.xlsx
# Export automatique de toutes les tables
python main.py reverse --database data/ma_base.db --output backup.xlsx --yes# 1. Convertir Excel → SQLite
python main.py convert --file data/source.xlsx --database data/travail.db
# 2. Travailler avec la base SQLite (requêtes, modifications, etc.)
sqlite3 data/travail.db
# 3. Exporter le résultat vers Excel
python main.py reverse --database data/travail.db --output data/resultat.xlsxpython main.py convert
# ou : e2db convertL'application vous guidera pas à pas :
- 📁 Sélection du fichier Excel (avec auto-complétion)
- 🔍 Analyse des feuilles
- 💾 Configuration de la base de données
- 📋 Sélection des feuilles à convertir
- ⚙️ Gestion des conflits (si tables existantes)
- ⏳ Conversion avec barres de progression
- ✅ Résumé final avec statistiques
python main.py reverse
# ou : e2db reverseL'application vous guidera :
- 📁 Sélection de la base de données (avec auto-complétion)
- 🔍 Analyse des tables
- 📋 Sélection des tables à exporter
- 📊 Configuration du fichier Excel de sortie
- ⏳ Export avec barres de progression
- ✅ Résumé final avec statistiques
excel-to-db/
├── data/ # Répertoire pour fichiers de test
│ ├── sample_data.xlsx
│ └── sample_data.db
├── src/
│ ├── __init__.py
│ ├── core/ # 📦 Module métier (logique de conversion)
│ │ ├── __init__.py
│ │ ├── excel_reader.py # Lecture fichiers Excel
│ │ ├── database_reader.py # Lecture bases SQLite
│ │ ├── excel_writer.py # Écriture fichiers Excel
│ │ ├── type_detector.py # Détection automatique des types
│ │ └── db_manager.py # Gestion bases de données SQLite
│ ├── ui/ # 🎨 Interface utilisateur
│ │ ├── __init__.py
│ │ ├── display.py # Affichage commun (Rich)
│ │ ├── convert/ # UI pour Excel → SQLite
│ │ │ ├── __init__.py
│ │ │ ├── display.py # Affichage spécifique
│ │ │ └── prompts.py # Prompts interactifs
│ │ └── reverse/ # UI pour SQLite → Excel
│ │ ├── __init__.py
│ │ ├── display.py # Affichage spécifique
│ │ └── prompts.py # Prompts interactifs
│ └── utils/ # 🛠️ Utilitaires
│ ├── __init__.py
│ ├── logger.py # Configuration logging
│ └── name_cleaner.py # Nettoyage noms SQLite
├── main.py # 🚀 Point d'entrée CLI
├── requirements.txt # 📋 Dépendances Python
├── setup.py # ⚙️ Configuration installation
└── README.md # 📖 Documentation
Le projet suit une architecture claire avec séparation des responsabilités :
core/: Logique métier centraliséeexcel_reader.py: Lecture et analyse des fichiers Exceldatabase_reader.py: Lecture des bases SQLiteexcel_writer.py: Création de fichiers Exceltype_detector.py: Détection automatique des types de donnéesdb_manager.py: Gestion des bases de données SQLite
ui/convert/: Interface utilisateur pour Excel → SQLiteui/reverse/: Interface utilisateur pour SQLite → Excelui/display.py: Fonctions d'affichage communes (Rich)utils/: Utilitaires réutilisables (logger, nettoyage)
| Type Pandas | Type SQLite | Description |
|---|---|---|
| object | TEXT | Texte, chaînes |
| int64, int32 | INTEGER | Nombres entiers |
| float64, float32 | REAL | Nombres décimaux |
| datetime64 | TEXT | Dates (format ISO 8601) |
| bool | INTEGER | Booléens (0/1) |
| timedelta | TEXT | Durées |
| Type SQLite | Type Excel | Description |
|---|---|---|
| TEXT | Texte | Chaînes de caractères |
| INTEGER | Nombre | Nombres entiers |
| REAL | Nombre | Nombres décimaux |
| BLOB | Texte (Base64) | Données binaires encodées |
Les données sont préservées lors de la conversion dans les deux sens.
Lorsqu'une table existe déjà dans la base de données :
- Écraser : Supprimer la table existante et recréer
- Ajouter : Insérer les nouvelles données à la suite
- Ignorer : Passer à la feuille suivante
- Annuler : Arrêter l'opération
Base de données existante (convert) :
- Utiliser : Utiliser la base existante (gérer les conflits table par table)
- Écraser : Supprimer complètement la base et la recréer
- Renommer : Créer une nouvelle base avec un autre nom
- Annuler : Arrêter l'opération
Fichier Excel existant (reverse) :
- Écraser : Remplacer le fichier Excel existant
- Renommer : Créer un nouveau fichier avec un autre nom
- Annuler : Arrêter l'opération
Chaque opération (convert ou reverse) génère des entrées dans excel_to_db.log contenant :
Pour convert (Excel → SQLite) :
- Timestamp de chaque opération
- Informations sur les feuilles converties
- Types de données détectés
- Nombre de lignes insérées
- Durée des opérations
- Erreurs éventuelles
Pour reverse (SQLite → Excel) :
- Timestamp de chaque opération
- Informations sur les tables exportées
- Nombre de lignes exportées par table
- Durée des opérations
- Taille du fichier Excel créé
- Erreurs éventuelles
Avec l'outil e2db :
python main.py info data/test.db
# ou : e2db info data/test.dbAvec SQLite en ligne de commande :
# Ouvrir la base de données
sqlite3 data/test.db
# Lister les tables
.tables
# Voir le schéma d'une table
.schema clients
# Requête SQL
SELECT * FROM clients LIMIT 10;
# Quitter
.quitAvec un outil graphique :
Utilisez DB Browser for SQLite pour une interface graphique.
Ouvrir avec Excel/LibreOffice :
# Windows
start data/export.xlsx
# Ou double-cliquer sur le fichierCaractéristiques du fichier généré :
- ✅ Une feuille par table
- ✅ En-têtes formatés (gras, fond bleu)
- ✅ Colonnes auto-ajustées
- ✅ Compatible Excel, LibreOffice, Google Sheets
Si vous avez une erreur "Module not found", vérifiez que toutes les dépendances sont installées :
pip install -r requirements.txtAssurez-vous que le chemin vers le fichier Excel est correct. Utilisez des chemins absolus si nécessaire :
python main.py convert --file C:\Users\VotreNom\Documents\data.xlsxSi la base de données est verrouillée, fermez tous les programmes qui l'utilisent (DB Browser for SQLite, etc.).
Si l'export vers Excel échoue :
- Vérifiez que le répertoire de destination existe
- Fermez le fichier Excel s'il est déjà ouvert
- Vérifiez les permissions d'écriture du répertoire
- Utilisez un chemin absolu si nécessaire :
python main.py reverse --database data/ma_base.db --output C:\Users\VotreNom\Documents\export.xlsxPour de très grandes bases de données ou fichiers Excel :
- La commande
convertutilise le chunking automatique (10 000 lignes par lot) - La commande
reversecharge les tables en mémoire (peut être lent pour des tables > 100 000 lignes) - Utilisez le mode
--yespour éviter les pauses interactives
Les contributions sont les bienvenues ! N'hésitez pas à :
- Signaler des bugs
- Proposer de nouvelles fonctionnalités
- Soumettre des pull requests
MIT License - Voir le fichier LICENSE pour plus de détails
# 1. Convertir Excel vers SQLite
python main.py convert -f ventes.xlsx -d ventes.db
# 2. Analyser avec SQL
sqlite3 ventes.db
SELECT categorie, SUM(montant) FROM ventes GROUP BY categorie;
# 3. Exporter le résultat vers Excel
python main.py reverse -d ventes.db -o rapport_ventes.xlsx# Backup : SQLite → Excel
python main.py reverse -d production.db -o backup_$(date +%Y%m%d).xlsx -y
# Restauration : Excel → SQLite
python main.py convert -f backup_20231031.xlsx -d production_restored.db -y# Exporter depuis une ancienne base
python main.py reverse -d ancienne_base.db -o donnees.xlsx
# Modifier dans Excel, puis importer dans la nouvelle base
python main.py convert -f donnees.xlsx -d nouvelle_base.dbDéveloppé avec ❤️ en suivant les meilleures pratiques Python du moment
Pour toute question ou problème :
- Consultez la documentation
- Vérifiez les logs dans
excel_to_db.log - Ouvrez une issue sur le dépôt