PHPackages                             gponty/entity-to-google-sheets-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. gponty/entity-to-google-sheets-bundle

ActiveSymfony-bundle[Database &amp; ORM](/categories/database)

gponty/entity-to-google-sheets-bundle
=====================================

Export Doctrine entities to Google Sheets

1.0.2(2mo ago)0177MITPHPPHP &gt;=8.2

Since Feb 19Pushed 2mo agoCompare

[ Source](https://github.com/gponty/entity-to-google-sheets-bundle)[ Packagist](https://packagist.org/packages/gponty/entity-to-google-sheets-bundle)[ RSS](/packages/gponty-entity-to-google-sheets-bundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (4)Versions (4)Used By (0)

Entity to Google Sheets Bundle
==============================

[](#entity-to-google-sheets-bundle)

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT)

Un bundle Symfony puissant et simple pour exporter automatiquement les entités Doctrine vers des feuilles Google Sheets.

Fonctionnalités
---------------

[](#fonctionnalités)

- 📊 **Export des entités Doctrine** : Exporte toutes vos entités Doctrine vers Google Sheets automatiquement
- 🔄 **Gestion complète des relations** : Support des relations OneToOne, OneToMany, ManyToOne et ManyToMany
- 📑 **Onglets organisés** : Crée automatiquement un onglet par entité avec des informations détaillées
- 🗂️ **Feuille d'index** : Génère une feuille d'index avec la liste complète de toutes les entités
- 🧹 **Nettoyage automatique** : Efface les données précédentes avant chaque export
- 💻 **Interface en ligne de commande** : Commande Symfony simple et intuitive
- 🔐 **Authentification Google** : Intégration sécurisée avec l'API Google Sheets

Prérequis
---------

[](#prérequis)

- PHP &gt;= 8.2
- Symfony Framework 7.0 ou 8.0
- Doctrine ORM &gt;= 3.0
- Google API Client &gt;= 2.15

Installation
------------

[](#installation)

### 1. Installer via Composer

[](#1-installer-via-composer)

```
composer require gponty/entity-to-google-sheets-bundle
```

### 2. Enregistrer le bundle

[](#2-enregistrer-le-bundle)

Si vous n'êtes pas sur une version totalement récente de Symfony, enregistrez le bundle dans `config/bundles.php` :

```
return [
    // ...
    TonVendor\EntityToGoogleSheetsBundle\EntityToGoogleSheetsBundle::class => ['all' => true],
];
```

### 3. Configurer les identifiants Google

[](#3-configurer-les-identifiants-google)

#### Créer un projet Google Cloud

[](#créer-un-projet-google-cloud)

1. Allez sur [Google Cloud Console](https://console.cloud.google.com/)
2. Créez un nouveau projet
3. Activez l'API **Google Sheets API**
4. Créez un compte de service
5. Téléchargez le fichier de clés JSON

#### Ajouter une variable d'environnement

[](#ajouter-une-variable-denvironnement)

Dans votre fichier `.env` :

```
GOOGLE_SHEETS_SPREADSHEET_ID=your_spreadsheet_id_here
GOOGLE_SHEETS_CREDENTIALS_PATH=%kernel.project_dir%/credentials/google-credentials.json
```

#### Partager le spreadsheet avec le compte de service

[](#partager-le-spreadsheet-avec-le-compte-de-service)

⚠️ **Étape importante** : Vous devez donner accès au Google Sheet au compte de service.

1. Ouvrez le fichier `google-credentials.json` que vous avez téléchargé
2. Trouvez le champ `"client_email"`, par exemple : `my-service-account@my-project.iam.gserviceaccount.com`
3. Allez sur votre [Google Sheet](https://sheets.google.com/)
4. Cliquez sur le bouton **"Partager"** en haut à droite
5. Collez l'email du compte de service (`client_email`)
6. Donnez les permissions **"Éditeur"** (Editor)
7. Cliquez sur **"Partager"**

Sans cette étape, le bundle ne pourra pas accéder au spreadsheet et l'export échouera avec une erreur d'authentification.

Utilisation
-----------

[](#utilisation)

### Exécuter l'export

[](#exécuter-lexport)

```
php bin/console app:export-entities-to-sheets
```

Cette commande va :

1. Lire toutes les entités Doctrine enregistrées
2. Créer ou mettre à jour les onglets Google Sheets correspondants
3. Remplir chaque onglet avec les informations de l'entité
4. Générer une feuille d'index avec la liste complète

### Exemple de sortie

[](#exemple-de-sortie)

```
 Export des entités vers Google Sheets
 ====================================

 Lecture des entités Doctrine...
 15 entité(s) trouvée(s).

 Export vers Google Sheets...
 [████████████████████████] 100%

 ✓ Export terminé avec succès ! 🎉

```

Bonnes pratiques
----------------

[](#bonnes-pratiques)

### Lancer la commande à chaque déploiement

[](#lancer-la-commande-à-chaque-déploiement)

🎯 **Conseil important** : Il est recommandé de lancer la commande à la fin de chaque déploiement pour s'assurer que votre Google Sheet reste toujours synchronisé avec votre structure de base de données.

#### Via un script de déploiement

[](#via-un-script-de-déploiement)

Ajouter la commande dans votre script de déploiement (par exemple dans `deploy.sh`) :

```
#!/bin/bash
# ... autres commandes de déploiement ...

# Étapes classiques
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console cache:clear --env=prod

# ✨ Export automatique vers Google Sheets
php bin/console app:export-entities-to-sheets

echo "✓ Déploiement terminé !"
```

#### Via un hook Symfony (post-deploy)

[](#via-un-hook-symfony-post-deploy)

Si vous utilisez Symfony Flex ou un orchestrateur (Capistrano, Deployer, etc.), intégrez la commande dans votre config :

```
# config/services.yaml (exemple avec Capistrano)
deploy:
  post-deploy:
    - php bin/console app:export-entities-to-sheets
```

#### Via un job cron (mise à jour périodique)

[](#via-un-job-cron-mise-à-jour-périodique)

Pour une mise à jour automatique périodique :

```
# Ajouter dans crontab
0 2 * * * cd /path/to/project && php bin/console app:export-entities-to-sheets >> /var/log/sheets-export.log 2>&1
```

Cela va exécuter l'export chaque nuit à 2h du matin.

Structure des données exportées
-------------------------------

[](#structure-des-données-exportées)

### Chaque onglet d'entité contient :

[](#chaque-onglet-dentité-contient-)

ColonneDescription**Nom du champ**Nom de la propriété de l'entité**Colonne DB**Nom de la colonne en base de données**Type**Type de données (string, integer, datetime, etc.)**Nullable**Si le champ peut être nul**Longueur**Longueur maximale du champ (s'applicable)**Unique**Si le champ a une contrainte UNIQUE**ID**Si c'est la clé primaire### Feuille d'index

[](#feuille-dindex)

Une feuille d'index est créée avec :

- Liste de toutes les entités
- Tableau correspondant
- Nombre de champs par entité
- Dates de création et de modification

Configuration avancée
---------------------

[](#configuration-avancée)

### Services personnalisés

[](#services-personnalisés)

Le bundle enregistre automatiquement les services suivants :

- `entity_to_google_sheets.entity_reader` : Lecteur d'entités Doctrine
- `entity_to_google_sheets.sheets_exporter` : Exportateur Google Sheets

Vous pouvez les injecter dans vos propres services :

```
use Gponty\EntityToGoogleSheetsBundle\Service\EntityReader;
use Gponty\EntityToGoogleSheetsBundle\Service\GoogleSheetsExporter;

class MonService
{
    public function __construct(
        private readonly EntityReader $entityReader,
        private readonly GoogleSheetsExporter $exporter,
    ) {}

    public function faireQuelquechose()
    {
        $entities = $this->entityReader->getAllEntities();
        $this->exporter->export($entities);
    }
}
```

Gestion des erreurs
-------------------

[](#gestion-des-erreurs)

En cas d'erreur lors de l'authentification Google ou de l'accès au Spreadsheet :

```
# Vérifiez que le fichier credentials.json existe et est valide
# Vérifiez que le SPREADSHEET_ID est correct
# Vérifiez que le compte de service a accès au spreadsheet
```

Architecture
------------

[](#architecture)

### Classes principales

[](#classes-principales)

#### `EntityReader`

[](#entityreader)

Lit les métadonnées de toutes les entités Doctrine enregistrées et extrait :

- Les noms des champs et leurs types
- Les colonnes de base de données
- Les relations (OneToOne, OneToMany, ManyToOne, ManyToMany)
- Les contraintes (nullable, unique, length)

#### `GoogleSheetsExporter`

[](#googlesheetsexporter)

Gère l'interaction avec l'API Google Sheets :

- Authentification via le compte de service
- Création/suppression d'onglets
- Insertion de données formatées
- Mise en forme des feuilles

#### `ExportEntitiesToSheetsCommand`

[](#exportentitiestosheetscommand)

Commande Symfony orchestrant le processus complet avec une interface utilisateur conviviale.

Support des types de données
----------------------------

[](#support-des-types-de-données)

Le bundle supporte les types Doctrine suivants :

- **Chaînes** : string, text
- **Numériques** : integer, smallint, bigint, decimal, float
- **Booléens** : boolean
- **Dates** : date, datetime, datetimetz, time
- **JSON** : json, json\_array
- **Relations** : one\_to\_one, one\_to\_many, many\_to\_one, many\_to\_many

Limitations
-----------

[](#limitations)

- Les données binaires (BLOB) ne sont pas exportées
- Les relations circulaires affichent uniquement le nom de la jointure
- Google Sheets a une limite d'environ 5 millions de cellules par feuille

Performance
-----------

[](#performance)

Pour les projets avec un grand nombre d'entités :

- L'export est optimisé pour minimiser les appels API Google
- Les métadonnées sont cachées en mémoire
- Le traitement est linéaire par rapport au nombre d'entités

Dépannage
---------

[](#dépannage)

### L'export échoue avec "Unable to authenticate"

[](#lexport-échoue-avec-unable-to-authenticate)

- Vérifiez que les identifiants Google sont corrects
- Assurez-vous que le compte de service a accès au spreadsheet
- Vérifiez que l'API Google Sheets est activée

### Aucune entité n'est trouvée

[](#aucune-entité-nest-trouvée)

- Vérifiez que vos entités sont correctement mappées avec Doctrine
- Assurez-vous que le gestionnaire d'entités Doctrine est fonctionnel

### L'export s'arrête au bout d'un certain temps

[](#lexport-sarrête-au-bout-dun-certain-temps)

- Ce peut être une limite de l'API Google. Attendez quelques minutes avant de réessayer

Licence
-------

[](#licence)

Ce bundle est sous licence MIT. Voir [LICENSE](LICENSE) pour plus de détails.

Contribution
------------

[](#contribution)

Les contributions sont les bienvenues ! Pour contribuer :

1. Forkez le repository
2. Créez une branche pour votre feature (`git checkout -b feature/AmazingFeature`)
3. Commitez vos changements (`git commit -m 'Add some AmazingFeature'`)
4. Poussez vers la branche (`git push origin feature/AmazingFeature`)
5. Ouvrez une Pull Request

Auteur
------

[](#auteur)

Développé par **gponty**

Changelog
---------

[](#changelog)

### Version 1.0.0

[](#version-100)

- ✨ Release initiale
- 📊 Support complet de l'export des entités Doctrine
- 🔄 Gestion des relations
- 📑 Génération automatique d'onglets

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance83

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

88d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/34276317?v=4)[Guillaume Ponty](/maintainers/gponty)[@gponty](https://github.com/gponty)

---

Top Contributors

[![gponty](https://avatars.githubusercontent.com/u/34276317?v=4)](https://github.com/gponty "gponty (5 commits)")

### Embed Badge

![Health badge](/badges/gponty-entity-to-google-sheets-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/gponty-entity-to-google-sheets-bundle/health.svg)](https://phpackages.com/packages/gponty-entity-to-google-sheets-bundle)
```

###  Alternatives

[hautelook/alice-bundle

Symfony bundle to manage fixtures with Alice and Faker.

19519.4M34](/packages/hautelook-alice-bundle)[kimai/kimai

Kimai - Time Tracking

4.6k7.4k1](/packages/kimai-kimai)[rcsofttech/audit-trail-bundle

Enterprise-grade, high-performance Symfony audit trail bundle. Automatically track Doctrine entity changes with split-phase architecture, multiple transports (HTTP, Queue, Doctrine), and sensitive data masking.

1022.4k](/packages/rcsofttech-audit-trail-bundle)[ahmed-bhs/doctrine-doctor

Runtime analysis tool for Doctrine ORM integrated into Symfony Web Profiler. Unlike static linters, it analyzes actual query execution at runtime to detect performance bottlenecks, security vulnerabilities, and best practice violations during development with real execution context and data.

813.1k](/packages/ahmed-bhs-doctrine-doctor)[heymoon/doctrine-psql-enum

Store PHP native enums as PostgeSQL custom enum types

254.9k](/packages/heymoon-doctrine-psql-enum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
