FirexportGuides
Comment exporter des données Firestore vers Excel
Excel ne peut pas lire Firestore directement, donc chaque chemin passe par un fichier : un CSV que vous ouvrez dans Excel, ou un .xlsx qu’un script écrit pour vous. Obtenir le fichier est la partie facile. L’ouvrir sans qu’Excel abîme le texte, supprime les zéros de tête ou entasse tout dans une colonne, c’est là que la plupart des gens bloquent, et ce guide couvre aussi cela.
Mis à jour le 24 septembre 2026. Firexport, l’extension de la méthode 1, est la nôtre. La méthode 2 n’en a pas besoin.
La réponse courte
- Les résultats d’une requête, tout de suite: exportez un CSV depuis le générateur de requêtes (Query builder) de la console avec une extension de navigateur, puis importez-le avec Données > À partir d’un fichier texte/CSV (Data > From Text/CSV). Méthode 1
- Une collection entière, avec nombres et dates déjà typés: un script Admin SDK qui écrit un fichier .xlsx. Méthode 2
- Google Sheets plutôt qu’Excel: importez l’un ou l’autre fichier avec Fichier > Importer (File > Import). Google Sheets
1. Exporter un CSV depuis la console Firebase, puis l’ouvrir dans Excel
La page Firestore de la console Firebase a un générateur de requêtes (Query builder) qui exécute une requête et affiche les résultats dans un tableau, mais rien pour les télécharger. Firexport est une extension Chrome gratuite qui ajoute un bouton Exporter à côté de ces résultats.
- Installez Firexport depuis le Chrome Web Store.
- Dans la console Firebase, ouvrez Firestore Database et passez de la vue en panneaux (Panel view) au générateur de requêtes (Query builder) (en haut à droite de l’onglet Données).
- Choisissez la collection sous Portée de la requête (Query scope) et Chemin (Path), ajoutez des filtres ou une limite si vous voulez, et cliquez sur Exécuter (Run).
- Cliquez sur Exporter au-dessus des résultats. Firexport parcourt toutes les pages de résultats et télécharge un seul fichier CSV.
- Dans Excel, allez dans Données > À partir d’un fichier texte/CSV (Data > From Text/CSV) (groupe Récupérer et transformer des données), choisissez le fichier, vérifiez l’aperçu et cliquez sur Charger (Load). Le tableau ci-dessous indique quel réglage changer si l’aperçu semble faux.

Le CSV de Firexport commence par une marque d’ordre des octets UTF-8, donc Excel lit correctement le texte non anglais même si vous double-cliquez simplement sur le fichier. Le double-clic laisse quand même Excel deviner le séparateur et les types, c’est pourquoi la boîte de dialogue d’importation est la voie la plus sûre. Dans la version gratuite, les horodatages sortent tels que la console les affiche (par exemple « August 24, 2026 at 1:16:09 PM UTC+9 »), et Excel les garde en texte. Firexport Advanced, une licence à paiement unique, écrit des horodatages ISO 8601 qu’Excel peut transformer en dates, et restaure les maps et tableaux longs que la console coupe par « … ».
Exportez votre prochaine requête Firestore vers un CSV qui s’ouvre proprement dans Excel, directement depuis la console.
Quand Excel abîme un CSV
Cela arrive avec n’importe quel CSV, quelle que soit la façon dont vous l’avez exporté. Toutes les solutions sont des réglages dans l’aperçu de À partir d’un fichier texte/CSV (From Text/CSV).
| Ce que vous voyez | Pourquoi | Solution |
|---|---|---|
| Le texte accentué ou non latin est illisible : « José Müller » s’affiche « José Müller » | Le CSV est en UTF-8 sans marque d’ordre des octets (BOM), donc Excel le lit avec l’encodage hérité de votre système | Utilisez un CSV qui commence par un BOM (celui de Firexport le fait), ou réglez Origine du fichier (File Origin) sur 65001 : Unicode (UTF-8) |
| Toutes les lignes atterrissent dans la colonne A | Votre région utilise le point-virgule comme séparateur de liste (courant en Europe), et le fichier utilise des virgules | Réglez Délimiteur (Delimiter) sur Virgule |
| « 00123 » devient 123, et un ID à 20 chiffres devient 1,23457E+19 | Excel transforme en nombre tout ce qui ressemble à un nombre, et les nombres ne gardent que 15 chiffres | Réglez la détection du type de données sur Ne pas détecter les types de données (Do not detect data types), pour que chaque colonne arrive en texte |
| Les horodatages se trient comme du texte, pas comme des dates | Ouvert directement, Excel laisse le texte ISO 8601 comme 2026-08-24T04:16:09Z en texte. Détection des types désactivée, toutes les colonnes sont du texte | Dans Transformer les données (Transform Data), changez le type de la colonne en Date/Heure/Fuseau horaire |
Les maps et les tableaux arrivent en texte dans une cellule, parce qu’une cellule contient une seule valeur. Si vous avez besoin de leurs champs en colonnes, sélectionnez la colonne dans Transformer les données (Transform Data) et utilisez Analyser > JSON (Parse > JSON), puis développez-la. Cela demande du JSON valide dans chaque cellule, ce que Firexport Advanced et le script ci-dessous écrivent toujours ; la version gratuite écrit le texte de la console quand elle ne peut pas relire une valeur en JSON.
2. Écrire un fichier .xlsx avec un script Admin SDK
Un script peut sauter l’étape CSV et écrire directement un classeur Excel, chaque cellule ayant déjà le bon type : les nombres en nombres, les horodatages en dates et les ID en texte, donc rien ne perd de zéro de tête. Il faut Node.js et un compte qui peut lire Firestore : un Propriétaire ou un Éditeur du projet, ou le rôle Lecteur Cloud Datastore.
- Installez le SDK Admin et ExcelJS :
npm install firebase-admin exceljs - Connectez-vous pour obtenir des identifiants locaux :
gcloud auth application-default login. Sur un serveur, faites plutôt pointerGOOGLE_APPLICATION_CREDENTIALSvers une clé de compte de service. - Enregistrez le script ci-dessous sous
export-to-excel.mjs, remplacezyour-project-idet exécuteznode export-to-excel.mjs users.
// Usage: node export-to-excel.mjs users → writes users.xlsx
import ExcelJS from 'exceljs';
import { initializeApp } from 'firebase-admin/app';
import {
getFirestore,
FieldPath,
Timestamp,
GeoPoint,
DocumentReference,
} from 'firebase-admin/firestore';
initializeApp({ projectId: 'your-project-id' });
const db = getFirestore();
const collection = process.argv[2];
if (!collection) throw new Error('Usage: node export-to-excel.mjs <collection>');
// Read the collection 1,000 documents at a time, so large collections don't time out.
const docs = [];
let last;
while (true) {
let query = db.collection(collection).orderBy(FieldPath.documentId()).limit(1000);
if (last) query = query.startAfter(last);
const page = await query.get();
if (page.empty) break;
docs.push(...page.docs);
last = page.docs[page.docs.length - 1];
}
// Firestore types become plain values: timestamps as ISO 8601, references as paths.
function plain(value) {
if (value instanceof Timestamp) return value.toDate().toISOString();
if (value instanceof DocumentReference) return value.path;
if (value instanceof GeoPoint) return { latitude: value.latitude, longitude: value.longitude };
if (value instanceof Uint8Array) return Buffer.from(value).toString('base64');
if (Array.isArray(value)) return value.map(plain);
if (value && typeof value === 'object') {
return Object.fromEntries(Object.entries(value).map(([key, v]) => [key, plain(v)]));
}
return value;
}
// A timestamp field becomes a real Excel date (in UTC). A cell holds one value, so maps and arrays
// go in as JSON text. Strings stay strings, so IDs like "00123" keep their leading zeros.
function cell(value) {
if (value instanceof Timestamp) return value.toDate();
const v = plain(value);
return v !== null && typeof v === 'object' ? JSON.stringify(v) : v;
}
const rows = docs.map((doc) => ({ documentId: doc.id, ...doc.data() }));
// Documents in one collection can have different fields, so the columns are all of them.
const columns = [...new Set(rows.flatMap((row) => Object.keys(row)))];
const workbook = new ExcelJS.Workbook();
const sheet = workbook.addWorksheet(collection.slice(0, 31), { views: [{ state: 'frozen', ySplit: 1 }] });
sheet.columns = columns.map((key) => ({ header: key, key, width: 20 }));
sheet.getRow(1).font = { bold: true };
for (const row of rows) {
const added = sheet.addRow(Object.fromEntries(columns.map((key) => [key, cell(row[key])])));
added.eachCell((c) => {
if (c.value instanceof Date) c.numFmt = 'yyyy-mm-dd hh:mm:ss';
});
}
await workbook.xlsx.writeFile(`${collection}.xlsx`);
console.log(`Wrote ${rows.length} documents to ${collection}.xlsx`);- Le classeur a une feuille nommée d’après la collection, avec une ligne d’en-tête en gras et figée : une colonne
documentId, puis une colonne par champ. - Les horodatages sont des dates Excel affichées
yyyy-mm-dd hh:mm:ss, en UTC. Les maps, tableaux et geopoints sont du texte JSON, et les références sont des chemins de document. - Une feuille Excel contient 1 048 576 lignes, et le script garde chaque ligne en mémoire jusqu’à écrire le fichier. Pour de plus grandes collections, utilisez la voie gcloud et BigQuery du guide CSV.
Google Sheets
Google Sheets ouvre les deux fichiers. Allez dans Fichier > Importer (File > Import), chargez le CSV ou le .xlsx et choisissez où il va (une nouvelle feuille de calcul, une nouvelle feuille ou la feuille actuelle).
- Pour un CSV, réglez le séparateur sur Virgule (ou laissez Détecter automatiquement).
- Décochez Convertir le texte en nombres, dates et formules (Convert text to numbers, dates, and formulas) si vos données ont des ID, numéros de téléphone ou codes avec des zéros de tête. Sinon Sheets transforme « 00123 » en 123.
- Une feuille de calcul contient 10 millions de cellules au total, toutes feuilles confondues.
FAQ
Excel peut-il se connecter directement à Firestore ?
Pas avec un connecteur intégré : Obtenir des données d’Excel n’a pas de source Firestore. Vous exportez d’abord un fichier, soit un CSV qu’Excel importe, soit un .xlsx qu’un script écrit, comme le montre ce guide.
Pourquoi Excel affiche-t-il des caractères illisibles comme « José » dans mon CSV ?
Le fichier est en UTF-8 mais sans marque d’ordre des octets, donc Excel le lit avec l’encodage hérité de votre système. Utilisez un CSV qui commence par un BOM (celui de Firexport le fait), ou importez-le avec Données > À partir d’un fichier texte/CSV (Data > From Text/CSV) et réglez Origine du fichier (File Origin) sur 65001 : Unicode (UTF-8).
Combien de lignes Excel ou Google Sheets peuvent-ils contenir ?
Une feuille de calcul Excel contient 1 048 576 lignes, et une cellule au plus 32 767 caractères. Une feuille de calcul Google Sheets contient 10 millions de cellules au total. Pour de plus grandes collections, exportez en CSV avec gcloud et BigQuery et travaillez les données là-bas.
Exporter des données Firestore coûte-t-il de l’argent ?
Chaque méthode lit chaque document exporté au moins une fois, et Firestore facture ces lectures de documents. Dans le quota gratuit quotidien, cela ne coûte rien.
