Skip to content

Latest commit

 

History

History
437 lines (329 loc) · 17.4 KB

File metadata and controls

437 lines (329 loc) · 17.4 KB

MiniSheet - Application Tableur en Rust

Une application de tableur riche en fonctionnalités construite avec Rust et egui/eframe, inspirée d'Excel. MiniSheet offre une expérience de tableur desktop moderne et performante avec un support complet des formules, du formatage des cellules et des outils de manipulation de données.

📸 Captures d'écran

Mode Clair

MiniSheet - Mode Clair

Mode Sombre

MiniSheet - Mode Sombre

🚀 Fonctionnalités

Fonctionnalités Principales

  • Grille Infinie : Tableur défilable avec expansion dynamique des lignes/colonnes
  • Sélection de Cellules : Support de la sélection simple, de plage et multiple
  • Édition In-Cell : Édition directe dans la cellule avec F2 ou double-clic
  • Barre de Formule : Saisie de formule dédiée avec bouton d'application
  • Recalcul Automatique : Suivi intelligent des dépendances avec détection de cycles
  • Annuler/Rétablir : Historique illimité d'annulation/rétablissement (Ctrl+Z / Ctrl+Y)
  • Copier/Coller : Support complet du presse-papiers (Ctrl+C / Ctrl+V)

Formules et Fonctions

Opérateurs de Base

  • Arithmétiques : +, -, *, /
  • Puissance : ^
  • Comparaisons : =, <>, <, >, <=, >=
  • Parenthèses : () pour le regroupement

Références de Cellules

  • Relative : A1, B2 (s'ajuste lors de la copie)
  • Absolue : $A$1 (ligne et colonne fixes)
  • Mixte : $A1 (colonne fixe), A$1 (ligne fixe)
  • Plages : A1:B5, SUM(A1:A10)

Fonctions Intégrées

Mathématiques :

  • SUM(plage) - Somme des valeurs
  • AVG(plage) - Moyenne des valeurs
  • MIN(plage) - Valeur minimale
  • MAX(plage) - Valeur maximale
  • COUNT(plage) - Nombre de valeurs numériques
  • ABS(valeur) - Valeur absolue
  • SQRT(valeur) - Racine carrée
  • ROUND(valeur, décimales) - Arrondir à un nombre de décimales
  • POWER(base, exposant) - Élever à une puissance

Conditionnelles :

  • IF(condition, valeur_vrai, valeur_faux) - Logique conditionnelle
  • SUMIF(plage, critère) - Somme avec condition
  • COUNTIF(plage, critère) - Compter avec condition
  • AVERAGEIF(plage, critère) - Moyenne avec condition

Fonctions de Texte :

  • CONCATENATE(texte1, texte2, ...) ou CONCAT(...) - Joindre du texte
  • LEFT(texte, nb_caractères) - Extraire les caractères de gauche
  • RIGHT(texte, nb_caractères) - Extraire les caractères de droite
  • MID(texte, position_début, nb_caractères) - Extraire les caractères du milieu

Fonctions de Recherche :

  • VLOOKUP(valeur_recherche, tableau, index_colonne, [recherche_approximative]) - Recherche verticale
  • HLOOKUP(valeur_recherche, tableau, index_ligne, [recherche_approximative]) - Recherche horizontale

Manipulation de Données

Poignée de Recopie

  • Détection Intelligente de Séquences : Détecte automatiquement les séquences numériques (1, 2, 3...) et les séquences de texte (Jan, Fév, Mar... ou Lun, Mar, Mer...)
  • Ajustement des Formules : Ajuste automatiquement les références relatives lors du remplissage
  • Glisser pour Remplir : Cliquez et glissez le petit carré dans le coin inférieur droit des cellules sélectionnées

Recherche et Remplacement

  • Rechercher : Rechercher dans toutes les cellules (Ctrl+F)
  • Remplacer : Remplacer une occurrence ou toutes les occurrences
  • Navigation : Naviguer dans les résultats avec les boutons Précédent/Suivant

Tri

  • Tri par Colonne : Cliquez sur les boutons ▲/▼ dans les en-têtes de colonnes
  • Support Multi-Type : Gère le tri numérique et textuel
  • Croissant/Décroissant : Basculer la direction du tri

Sélection Multiple

  • Sélection de Plage : Shift+Clic pour sélectionner des plages rectangulaires
  • Sélection Discontinue : Ctrl+Clic pour sélectionner plusieurs cellules non adjacentes
  • Tout Sélectionner : Ctrl+A pour sélectionner toute la feuille

Formatage des Cellules

Formatage du Texte

  • Gras (Ctrl+B)
  • Italique (Ctrl+I)
  • Couleur du Texte : Couleur de premier plan personnalisée
  • Couleur de Fond : Arrière-plan de cellule personnalisé

Alignement

  • Options d'alignement Gauche, Centre, Droite

Options d'Affichage

  • Afficher les Formules : Basculer pour afficher les formules au lieu des valeurs (Ctrl+`)

Opérations sur les Fichiers

  • Nouveau : Créer une nouvelle feuille de calcul (Ctrl+N)
  • Ouvrir : Ouvrir un fichier existant (Ctrl+O)
  • Enregistrer : Enregistrer le fichier actuel (Ctrl+S)
  • Enregistrer sous : Enregistrer dans un nouveau fichier (Ctrl+Shift+S)
  • Format : Format de fichier JSON avec sérialisation complète

Interface Utilisateur

Thèmes

  • Mode Sombre : Basculer entre les thèmes clair et sombre
  • Palette Personnalisée : Schéma de couleurs cohérent dans toute l'application
  • Barre de Statut : Messages de statut codés par couleur (OK, Avertissement, Erreur)

Retour Visuel

  • Mise en Surbrillance de la Sélection : Indication visuelle claire des cellules sélectionnées
  • Retour d'Erreur : Les cellules avec erreurs affichent un fond rouge
  • Mise en Surbrillance des Dépendances : Cellules référencées surlignées quand une cellule avec formule est sélectionnée
  • Effets au Survol : Retour visuel sur les éléments interactifs
  • Infobulles : Infobulles utiles sur les boutons et contrôles

Gestion des Colonnes

  • Colonnes Redimensionnables : Glisser les bordures des colonnes pour redimensionner
  • Ajustement Automatique : Ajustement automatique de la largeur des colonnes selon le contenu

Figer les Volets

  • Figer la Première Ligne : Garder la ligne d'en-tête visible lors du défilement
  • Figer la Première Colonne : Garder la première colonne visible lors du défilement

📋 Raccourcis Clavier

Navigation

  • Flèches : Déplacer la sélection
  • Tab : Aller à droite (Shift+Tab : aller à gauche)
  • Entrée : Aller en bas (Shift+Entrée : aller en haut)
  • Home : Aller à la première colonne
  • End : Aller à la dernière colonne
  • F2 : Entrer en mode édition
  • Échap : Annuler l'édition

Édition

  • Ctrl+Z : Annuler
  • Ctrl+Y ou Ctrl+Shift+Z : Rétablir
  • Ctrl+C : Copier
  • Ctrl+V : Coller
  • Suppr ou Retour arrière : Effacer la cellule

Formatage

  • Ctrl+B : Basculer le gras
  • Ctrl+I : Basculer l'italique
  • Ctrl+` : Basculer l'affichage des formules

Opérations sur les Fichiers

  • Ctrl+N : Nouvelle feuille de calcul
  • Ctrl+O : Ouvrir un fichier
  • Ctrl+S : Enregistrer
  • Ctrl+Shift+S : Enregistrer sous

Sélection

  • Ctrl+A : Sélectionner toutes les cellules
  • Ctrl+F : Ouvrir la boîte de dialogue Rechercher et Remplacer

🛠️ Installation

Prérequis

  • Toolchain Rust (installer depuis rustup.rs)
  • Cargo (fourni avec Rust)

Compilation depuis les Sources

# Cloner ou naviguer vers le répertoire du projet
cd exxel

# Compiler le projet
cargo build --release

# Exécuter l'application
cargo run --release

Dépendances

Le projet utilise les crates suivantes :

  • eframe = "0.27" - Framework GUI natif
  • egui = "0.27" - Bibliothèque GUI en mode immédiat
  • serde = "1.0" - Framework de sérialisation
  • serde_json = "1.0" - Support JSON
  • rfd = "0.14" - Dialogues de fichiers natifs

📖 Exemples d'Utilisation

Calculs de Base

A1: 10
A2: 20
A3: =A1+A2        → 30
A4: =A1*A2        → 200
A5: =A2/A1        → 2

Utilisation de Fonctions

A1: 5
A2: 10
A3: 15
A4: =SUM(A1:A3)   → 30
A5: =AVG(A1:A3)   → 10
A6: =MAX(A1:A3)   → 15
A7: =MIN(A1:A3)   → 5

Logique Conditionnelle

A1: 85
A2: =IF(A1>=90, "A", IF(A1>=80, "B", "C"))  → "B"

Fonctions de Texte

A1: "Hello"
A2: "World"
A3: =CONCATENATE(A1, " ", A2)  → "Hello World"
A4: =LEFT(A1, 3)              → "Hel"
A5: =RIGHT(A1, 3)              → "llo"

Exemple de Poignée de Recopie

  1. Saisir 1 dans A1
  2. Saisir 2 dans A2
  3. Sélectionner A1:A2
  4. Glisser la poignée de recopie (petit carré) vers le bas jusqu'à A10
  5. Résultat : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Copie de Formule Relative

  1. Saisir =A1+B1 dans C1
  2. Sélectionner C1 et glisser la poignée de recopie jusqu'à C5
  3. C2 devient =A2+B2, C3 devient =A3+B3, etc.

🏗️ Architecture

Main Components

  • App: Main application state and UI logic
  • Sheet: Spreadsheet data model (cells, formulas, formats)
  • CellValue: Enum representing cell value types (Empty, Number, Text, Error)
  • FormulaParser: Recursive descent parser for formula evaluation
  • Selection: Selection state management (Single, Range, Multiple)
  • Theme: Color palette and visual styling

Key Features

  • Incremental Recalculation: Only recalculates cells affected by changes
  • Cycle Detection: Prevents circular references
  • Error Handling: Comprehensive error messages and validation
  • Serialization: Full save/load support with custom HashMap serialization

📚 Documentation

MiniSheet dispose d'une documentation complète organisée en deux parties : des guides pratiques dans le dossier Guide/ et une documentation technique approfondie dans le dossier livre/.


📖 Guides Pratiques

Les guides pratiques sont disponibles dans le dossier Guide/ et couvrent des sujets spécifiques :

Guides Utilisateur

Guides Développeur

Guides Techniques

Guides Outils et Build

Guides Formats


📚 Documentation Technique Complète

MiniSheet est accompagné d'une documentation technique approfondie structurée en livre, couvrant tous les aspects du développement et de l'architecture.

Accès à la documentation

La documentation complète se trouve dans le dossier livre/ :

Contenu de la documentation

Chapitres principaux

  • Chapitre 1 : Introduction à MiniSheet - Présentation, historique, technologies
  • Chapitre 2 : Architecture et conception - Modules, données, sélection, thèmes
  • Chapitre 3 : Fonctionnalités de base - Grille, navigation, édition, sauvegarde
  • Chapitre 4 : Formules et fonctions - Parsing, évaluation, dépendances
  • Chapitre 5 : Interface utilisateur - egui, événements, rendu, composants
  • Chapitre 6 : Algorithmes et optimisation - Recherche, tri, mémoire, calculs
  • Chapitre 7 : Fonctionnalités avancées - Formatage conditionnel, validation, tableaux croisés
  • Chapitre 8 : Perspectives et développement - Limites, améliorations futures

Annexes spécialisées

Pour les développeurs

La documentation technique inclut :

  • Exemples de code Rust complets et fonctionnels
  • Architectures détaillées avec diagrammes
  • Algorithmes optimisés avec explications
  • Patterns de conception utilisés
  • Guides de contribution pour le développement

Pour les utilisateurs avancés

La documentation couvre :

  • Fonctionnalités avancées non documentées dans ce README
  • Exemples pratiques d'utilisation
  • Optimisations de performance
  • Dépannage et résolution de problèmes

Structure des fichiers

📁 Guide/                                    # Guides pratiques
├── 📄 GUIDE_UTILISATEUR.md                  # Guide utilisateur
├── 📄 GUIDE_FORMULES.md                     # Guide des formules
├── 📄 RACCOURCIS_CLAVIER.md                 # Raccourcis clavier
├── 📄 GUIDE_DEVELOPPEMENT.md                # Guide développeur
├── 📄 GUIDE_DEBUGGING.md                    # Guide débogage
├── 📄 API.md                                # Documentation API
├── 📄 ARCHITECTURE.md                       # Architecture technique
├── 📄 PERFORMANCE.md                        # Guide performance
├── 📄 SECURITE.md                           # Guide sécurité
├── 📄 GUIDE_DEPLOIEMENT.md                  # Guide déploiement
├── 📄 CARGO_TOML.md                         # Cargo.toml
├── 📄 CARGO_LOCK.md                         # Cargo.lock
├── 📄 TARGET_DIRECTORY.md                   # Répertoire target
├── 📄 TARGET_BUILDS.md                      # Build targets
└── 📄 FORMATS_FICHIERS.md                   # Formats de fichiers

📁 livre/                                    # Documentation technique approfondie
├── 📄 [README.md](./livre/README.md)                          # Guide de navigation
├── 📄 [TABLE_DES_MATIERES.md](./livre/TABLE_DES_MATIERES.md) # Table des matières complète
├── 📁 chapitre01/ à chapitre08/                              # 8 chapitres détaillés
│   └── 📄 Sections numérotées (1.1, 1.2, etc.)
└── 📁 annexes/                                               # 5 annexes pratiques
    ├── 📄 [annexe_A_fonctions_reference.md](./livre/annexes/annexe_A_fonctions_reference.md)
    ├── 📄 [annexe_B_raccourcis_clavier.md](./livre/annexes/annexe_B_raccourcis_clavier.md)
    ├── 📄 [annexe_C_structure_donnees.md](./livre/annexes/annexe_C_structure_donnees.md)
    ├── 📄 [annexe_D_exemples_pratiques.md](./livre/annexes/annexe_D_exemples_pratiques.md)
    └── 📄 [annexe_E_guide_contribution.md](./livre/annexes/annexe_E_guide_contribution.md)

🐛 Limitations Connues

  • Pas de support multi-feuilles (une seule feuille)
  • Pas de support de graphiques
  • Pas d'import/export Excel (.xlsx)
  • Validation de données basique uniquement
  • Pas de commentaires de cellules
  • Pas de règles de formatage conditionnel

🔮 Améliorations Futures

Fonctionnalités potentielles pour les versions futures :

  • Feuilles multiples avec onglets
  • Génération de graphiques
  • Support du format de fichier Excel (.xlsx)
  • Validation de données avancée
  • Commentaires de cellules
  • Formatage conditionnel
  • Fonctionnalité d'enregistrement automatique
  • Fonctions plus avancées (DATE, TIME, etc.)

📝 Licence

Ce projet est fourni tel quel à des fins éducatives et personnelles.

🤝 Contribution

Il s'agit d'un projet personnel, mais les suggestions et commentaires sont les bienvenus !

📧 Support

Pour les problèmes ou questions, veuillez consulter les commentaires du code ou créer une issue dans le dépôt du projet.


MiniSheet - Une application de tableur moderne construite avec Rust 🦀