Skip to content

Repository files navigation

Excelium

Excelium

Application web qui transforme un fichier Excel (.xlsx) en base de données PostgreSQL avec une interface de visualisation personnalisée selon les besoins de l'utilisateur, en détectant automatiquement la structure, les types et les dépendances entre feuilles.


Prérequis

  • Python 3.11+
  • Node.js v18+
  • PostgreSQL
  • Backend : FastAPI · Uvicorn · openpyxl · psycopg2 — Frontend : React · Vite · TypeScript

Installation

git clone https://github.com/anasys0x/Excelium.git
cd Excelium

Installe les dépendances Python :

pip install -r backend/requirements.txt
# si besoin, les dépendances de l'API :
pip install fastapi uvicorn python-multipart psycopg2-binary python-dotenv

Installe les dépendances du frontend :

cd frontend
npm install

Lancer l'application

1. Backend — lance l'API FastAPI (dans un terminal) :

cd backend
uvicorn api:app --reload

L'API tourne sur http://localhost:8000 (documentation interactive sur /docs).

2. Frontend — lance le serveur web (dans un autre terminal) :

cd frontend
npm run dev

Ouvre l'URL affichée (http://localhost:5173), glisse un fichier .xlsx, configure tes tables (renommage des colonnes, clé, réorganisation), puis crée la base de données.

Configuration (backend/.env)

Crée un fichier backend/.env avec les paramètres de connexion PostgreSQL :

DB_HOST=localhost
DB_PORT=5432
DB_NAME=excelium
DB_USER=postgres
DB_PASSWORD=ton_mot_de_passe

Export JSON (sans interface)

Pour exporter directement la structure d'un fichier Excel en JSON :

python3 backend/export.py data/excel.xlsx

Structure du projet

Excelium/
├── backend/
│   ├── api.py                 # API FastAPI — endpoints /parse, /create, /sessions, /tables/*
│   ├── main.py                # Point d'entrée CLI (insertion PostgreSQL)
│   ├── export.py              # Script d'export JSON
│   ├── constants.py           # Constantes (formats de date…)
│   ├── errors.py              # Hiérarchie d'exceptions
│   ├── utils.py               # Utilitaires (slugify…)
│   ├── models/
│   │   ├── excel/             # Workbook, Worksheet, Table, Column, Row, Cell
│   │   ├── relational/        # Modèle relationnel (tables, contraintes, FK/PK)
│   │   └── transforms/        # Conversion type Excel → SQL (Strategy pattern)
│   ├── services/               # excel_reader, excel_to_relational, type_detector, pk/fk_detector,
│   │                           # dependency_detector, sql_generator, db_creator, db_crud,
│   │                           # database_connection/execute, session_store, webapp_zip
│   └── tests/                  # Tests unitaires (pytest)
├── frontend/                   # React + Vite + TypeScript
│   ├── vitest.config.ts        # Config des tests (jsdom + testing-library)
│   └── src/
│       ├── App.tsx             # Orchestration du parcours (import → config → questionnaire → création)
│       ├── setupTests.ts       # Setup global des tests (jest-dom, mock ResizeObserver)
│       ├── index.css           # Thèmes clair/sombre (variables CSS)
│       ├── App.css             # Styles du parcours et de l'app générée
│       ├── export/             # Point d'entrée du build export autonome (ExportApp, main)
│       ├── lib/                # i18n, détection sémantique, moteur de préférences, données de
│       │                       # graphiques, archétypes, propositions d'UI, questions, sessions
│       │                       # (chaque module a son *.test.ts en regard)
│       └── components/
│           ├── DropZone.tsx, StepIndicator.tsx, SessionResume.tsx, Spinner.tsx, SkeletonRows.tsx
│           ├── landing/        # Landing.tsx, HeroDemo.tsx (démo animée Excel → app), Faq.tsx
│           ├── layout/         # SplitView.tsx
│           ├── table/          # TablePreview.tsx
│           ├── steps/          # StepSheetSelector, StepKeySelector, StepTableConfirmation,
│           │                   # StepQuestionnaire, StepUiProposals, QuestionCard,
│           │                   # ProposalPreview, MiniChart
│           ├── widgets/        # CellWidget.tsx
│           └── app/            # GeneratedApp.tsx + vues Table/Gallery/Dashboard/Cards/Schema,
│                               # ChartWidget, RowForm, RowDependencyGraph, DetailPanel,
│                               # ImpactModal, ConfirmModal, ErdPanel
│           (chaque composant testable a son *.test.tsx en regard)
├── data/                       # Fichiers Excel de test
└── docs/                       # Documentation MkDocs

Statut actuel

  • ✅ Semaine 1 : Documentation et analyse préliminaire.
  • ✅ Semaine 2 : Choix de la stack technique, comparaison des solutions existantes, modélisation des données.
  • ✅ Semaine 3 : Révision de la modélisation, retravail du diagramme de classe et clarification de certaines ambiguïtés.
  • ✅ Semaine 4 : Finalisation du diagramme de classe et réalisation d'une première itération du MVP.
  • ✅ Semaine 5 : Robustesse du backend et première interface de visualisation.
  • ✅ Semaine 6 : Interface web React (import par glisser-déposer, sélection des feuilles, configuration des tables, thème clair/sombre) et API FastAPI (/parse, /create) connectée à PostgreSQL.
  • ✅ Semaine 7 : Semaine de réflexion et préparation de la mise en commun II.
  • ✅ Semaine 8 : Application générée complète, CRUD sur les données live avec détection PK/FK et analyse d'impact, exports Excel/SQL, archétypes de table (templates sémantiques) et vue personnalisée à formules sur grille.

Documentation

La documentation complète est disponible sur :

https://anasys0x.github.io/Excelium/


Équipe

  • Anas Mrani Alaoui
  • Farah Romdhane

Superviseur : Louis-Edouard Lafontant
Session : Été 2026
Cours : IFT3150 — Projet informatique


Dernière mise à jour : 07 juillet 2026

About

Importez vos fichiers Excel et générez automatiquement une base de données relationnelle en ligne

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages