FirexportAnleitungen
Firestore-Daten nach Excel exportieren
Excel kann Firestore nicht direkt lesen, also führt jeder Weg über eine Datei: eine CSV, die Sie in Excel öffnen, oder eine .xlsx, die ein Skript für Sie schreibt. Die Datei zu bekommen ist der leichte Teil. Sie zu öffnen, ohne dass Excel Text verstümmelt, führende Nullen verwirft oder alles in eine Spalte quetscht – daran scheitern die meisten, und auch das behandelt diese Anleitung.
Aktualisiert am 24. September 2026. Firexport, die Erweiterung in Methode 1, ist von uns. Methode 2 braucht sie nicht.
Die kurze Antwort
- Die Ergebnisse einer Abfrage, jetzt sofort: eine CSV aus dem Abfrage-Builder (Query builder) der Console mit einer Browser-Erweiterung exportieren und dann über Daten > Aus Text/CSV (Data > From Text/CSV) importieren. Methode 1
- Eine ganze Sammlung, mit bereits typisierten Zahlen und Datumsangaben: ein Admin-SDK-Skript, das eine .xlsx-Datei schreibt. Methode 2
- Google Tabellen statt Excel: eine der beiden Dateien über Datei > Importieren (File > Import) importieren. Google Tabellen
1. Eine CSV aus der Firebase Console exportieren und in Excel öffnen
Die Firestore-Seite der Firebase Console hat einen Abfrage-Builder (Query builder), der eine Abfrage ausführt und die Ergebnisse in einer Tabelle zeigt – aber nichts, womit man sie herunterladen könnte. Firexport ist eine kostenlose Chrome-Erweiterung, die neben diesen Ergebnissen einen Exportieren-Button hinzufügt.
- Installieren Sie Firexport aus dem Chrome Web Store.
- Öffnen Sie in der Firebase Console Firestore Database und wechseln Sie von der Panelansicht (Panel view) zum Abfrage-Builder (Query builder) (oben rechts im Tab „Daten“).
- Wählen Sie die Sammlung unter Abfragebereich (Query scope) und Pfad (Path), fügen Sie bei Bedarf Filter oder ein Limit hinzu und klicken Sie auf Ausführen (Run).
- Klicken Sie über den Ergebnissen auf Exportieren. Firexport geht alle Ergebnisseiten durch und lädt eine CSV-Datei herunter.
- Gehen Sie in Excel auf Daten > Aus Text/CSV (Data > From Text/CSV) (Gruppe „Daten abrufen und transformieren“), wählen Sie die Datei, prüfen Sie die Vorschau und klicken Sie auf Laden (Load). Die Tabelle unten sagt, welche Einstellung Sie ändern, wenn die Vorschau falsch aussieht.

Die CSV von Firexport beginnt mit einem UTF-8-Byte-Order-Mark, daher liest Excel nicht-englischen Text auch dann richtig, wenn Sie die Datei nur doppelklicken. Beim Doppelklick rät Excel aber weiterhin Trennzeichen und Typen, weshalb der Importdialog der sicherere Weg ist. In der kostenlosen Version kommen Zeitstempel so heraus, wie die Console sie zeigt (zum Beispiel „August 24, 2026 at 1:16:09 PM UTC+9“), und Excel belässt sie als Text. Firexport Advanced, eine Lizenz zum Einmalkauf, schreibt ISO-8601-Zeitstempel, die Excel in Datumswerte umwandeln kann, und stellt lange Maps und Arrays wieder her, die die Console mit „…“ abschneidet.
Exportieren Sie Ihre nächste Firestore-Abfrage direkt aus der Console in eine CSV, die sich in Excel sauber öffnet.
Wenn Excel eine CSV verhunzt
Das passiert mit jeder CSV, egal wie Sie sie exportiert haben. Alle Abhilfen sind Einstellungen in der Vorschau von Aus Text/CSV (From Text/CSV).
| Was Sie sehen | Warum | Abhilfe |
|---|---|---|
| Text mit Akzenten oder nicht-lateinischer Text ist verstümmelt: „José Müller“ erscheint als „José Müller“ | Die CSV ist UTF-8 ohne Byte-Order-Mark (BOM), also liest Excel sie in der Legacy-Codierung Ihres Systems | Verwenden Sie eine CSV, die mit einem BOM beginnt (die von Firexport tut das), oder stellen Sie Dateiursprung (File Origin) auf 65001: Unicode (UTF-8) |
| Jede Zeile landet in Spalte A | Ihre Region nutzt das Semikolon als Listentrennzeichen (in Europa üblich), die Datei aber Kommas | Stellen Sie Trennzeichen (Delimiter) auf Komma |
| „00123“ wird zu 123, und eine 20-stellige ID zu 1,23457E+19 | Excel macht aus allem, was wie eine Zahl aussieht, eine Zahl, und Zahlen behalten nur 15 Stellen | Stellen Sie die Datentyperkennung auf Datentypen nicht erkennen (Do not detect data types), damit jede Spalte als Text ankommt |
| Zeitstempel sortieren sich als Text, nicht als Datum | Direkt geöffnet lässt Excel ISO-8601-Text wie 2026-08-24T04:16:09Z als Text. Mit ausgeschalteter Typerkennung ist jede Spalte Text | Ändern Sie in Daten transformieren (Transform Data) den Typ der Spalte auf Datum/Uhrzeit/Zeitzone |
Maps und Arrays kommen als Text in einer Zelle an, weil eine Zelle einen Wert enthält. Wenn Sie ihre Felder als Spalten brauchen, wählen Sie die Spalte in Daten transformieren (Transform Data) aus und nutzen Analysieren > JSON (Parse > JSON), dann erweitern Sie sie. Das braucht gültiges JSON in jeder Zelle, was Firexport Advanced und das Skript unten immer schreiben; die kostenlose Version schreibt den Text der Console, wenn sie einen Wert nicht als JSON zurücklesen kann.
2. Eine .xlsx-Datei mit einem Admin-SDK-Skript schreiben
Ein Skript kann den CSV-Schritt überspringen und direkt eine Excel-Arbeitsmappe schreiben, in der jede Zelle schon den richtigen Typ hat: Zahlen als Zahlen, Zeitstempel als Datum und IDs als Text, sodass nichts eine führende Null verliert. Es braucht Node.js und ein Konto, das Firestore lesen darf: einen Projekt-Inhaber oder -Bearbeiter oder die Rolle Cloud Datastore-Betrachter.
- Admin SDK und ExcelJS installieren:
npm install firebase-admin exceljs - Für lokale Anmeldedaten anmelden:
gcloud auth application-default login. Auf einem Server lassen Sie stattdessenGOOGLE_APPLICATION_CREDENTIALSauf einen Dienstkontoschlüssel zeigen. - Speichern Sie das Skript unten als
export-to-excel.mjs, ersetzen Sieyour-project-idund führen Sienode export-to-excel.mjs usersaus.
// 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`);- Die Arbeitsmappe hat ein Blatt mit dem Namen der Sammlung und einer fetten, fixierten Kopfzeile: eine Spalte
documentId, dann eine Spalte pro Feld. - Zeitstempel sind Excel-Datumswerte, angezeigt als
yyyy-mm-dd hh:mm:ss, in UTC. Maps, Arrays und Geopunkte sind JSON-Text, Referenzen sind Dokumentpfade. - Ein Excel-Blatt fasst 1.048.576 Zeilen, und das Skript hält jede Zeile im Speicher, bis es die Datei schreibt. Für größere Sammlungen nehmen Sie den gcloud-und-BigQuery-Weg aus der CSV-Anleitung.
Google Tabellen
Google Tabellen öffnet beide Dateien. Gehen Sie auf Datei > Importieren (File > Import), laden Sie die CSV oder die .xlsx hoch und wählen Sie, wohin sie soll (eine neue Tabelle, ein neues Blatt oder das aktuelle).
- Bei einer CSV stellen Sie das Trennzeichen auf Komma (oder lassen es auf Automatisch erkennen).
- Deaktivieren Sie Text in Zahlen, Datumsangaben und Formeln umwandeln (Convert text to numbers, dates, and formulas), wenn Ihre Daten IDs, Telefonnummern oder Codes mit führenden Nullen enthalten. Sonst macht Tabellen aus „00123“ eine 123.
- Eine Tabelle fasst insgesamt 10 Millionen Zellen, über alle Blätter hinweg.
FAQ
Kann Excel sich direkt mit Firestore verbinden?
Nicht mit einem eingebauten Connector: „Daten abrufen“ in Excel hat keine Firestore-Quelle. Sie exportieren zuerst eine Datei, entweder eine CSV, die Excel importiert, oder eine .xlsx, die ein Skript schreibt – wie in dieser Anleitung.
Warum zeigt Excel in meiner CSV verstümmelte Zeichen wie „José“?
Die Datei ist UTF-8, hat aber kein Byte-Order-Mark, also liest Excel sie in der Legacy-Codierung Ihres Systems. Verwenden Sie eine CSV, die mit einem BOM beginnt (die von Firexport tut das), oder importieren Sie sie über Daten > Aus Text/CSV (Data > From Text/CSV) und stellen Sie Dateiursprung (File Origin) auf 65001: Unicode (UTF-8).
Wie viele Zeilen fassen Excel oder Google Tabellen?
Ein Excel-Arbeitsblatt fasst 1.048.576 Zeilen, eine Zelle höchstens 32.767 Zeichen. Eine Google-Tabellen-Datei fasst insgesamt 10 Millionen Zellen. Für größere Sammlungen exportieren Sie mit gcloud und BigQuery als CSV und arbeiten dort mit den Daten.
Kostet der Export von Firestore-Daten Geld?
Jede Methode liest jedes exportierte Dokument mindestens einmal, und Firestore rechnet das als Dokumentlesevorgänge ab. Innerhalb des täglichen kostenlosen Kontingents kostet das nichts.
