FirexportGuias

Como exportar dados do Firestore para o Excel

O Excel não consegue ler o Firestore diretamente, então todo caminho passa por um arquivo: um CSV que você abre no Excel, ou um .xlsx que um script grava para você. Conseguir o arquivo é a parte fácil. Abri-lo sem que o Excel embaralhe o texto, derrube os zeros à esquerda ou enfie tudo em uma coluna é onde a maioria trava, e este guia cobre isso também.

Atualizado em 24 de setembro de 2026. O Firexport, a extensão do método 1, é nosso. O método 2 não precisa dele.

A resposta curta

  • Os resultados de uma consulta, agora: exporte um CSV do criador de consultas (Query builder) do console com uma extensão do navegador e importe com Dados > De Texto/CSV (Data > From Text/CSV). Método 1
  • Uma coleção inteira, com números e datas já tipados: um script do Admin SDK que grava um arquivo .xlsx. Método 2
  • Google Sheets em vez do Excel: importe qualquer um dos arquivos com Arquivo > Importar (File > Import). Google Sheets

1. Exportar um CSV do Console do Firebase e abri-lo no Excel

A página do Firestore no Console do Firebase tem um criador de consultas (Query builder) que executa uma consulta e mostra os resultados em uma tabela, mas nada para baixá-los. O Firexport é uma extensão gratuita do Chrome que adiciona um botão Exportar ao lado desses resultados.

  1. Instale o Firexport pela Chrome Web Store.
  2. No Console do Firebase, abra Firestore Database e mude de visualização em painel (Panel view) para criador de consultas (Query builder) (canto superior direito da guia Dados).
  3. Escolha a coleção em Escopo da consulta (Query scope) e Caminho (Path), adicione filtros ou um limite se quiser e clique em Executar (Run).
  4. Clique em Exportar acima dos resultados. O Firexport percorre todas as páginas dos resultados e baixa um único arquivo CSV.
  5. No Excel, vá em Dados > De Texto/CSV (Data > From Text/CSV) (no grupo Obter e Transformar Dados), escolha o arquivo, confira a visualização e clique em Carregar (Load). A tabela abaixo diz qual configuração mudar se a visualização parecer errada.
O criador de consultas do Firestore no Console do Firebase, com o botão Exportar que o Firexport adiciona acima dos resultados da consulta
O botão Exportar fica acima dos resultados do criador de consultas.

O CSV do Firexport começa com uma marca de ordem de bytes UTF-8, então o Excel lê texto não inglês corretamente mesmo se você só der dois cliques no arquivo. Ainda assim, com dois cliques o Excel adivinha o separador e os tipos, e por isso a caixa de diálogo de importação é o caminho mais seguro. Na versão gratuita, os timestamps saem como o console os mostra (por exemplo “August 24, 2026 at 1:16:09 PM UTC+9”), e o Excel os mantém como texto. O Firexport Advanced, uma licença de compra única, grava timestamps ISO 8601 que o Excel consegue transformar em datas, e restaura mapas e arrays longos que o console corta com “…”.

Exporte sua próxima consulta do Firestore para um CSV que abre limpo no Excel, direto do console.

Adicionar ao Chrome — grátis

Quando o Excel estraga um CSV

Isso acontece com qualquer CSV, seja qual for o jeito que você exportou. Todas as correções são configurações na visualização de De Texto/CSV (From Text/CSV).

O que você vêPor quêCorreção
Texto acentuado ou não latino sai embaralhado: “José Müller” aparece como “José Müller”O CSV é UTF-8 sem marca de ordem de bytes (BOM), então o Excel o lê na codificação legada do seu sistemaUse um CSV que comece com BOM (o do Firexport começa), ou defina Origem do Arquivo (File Origin) como 65001: Unicode (UTF-8)
Todas as linhas caem na coluna ASua região usa ponto e vírgula como separador de lista (comum na Europa), e o arquivo usa vírgulasDefina Delimitador (Delimiter) como Vírgula
“00123” vira 123, e um ID de 20 dígitos vira 1.23457E+19O Excel transforma em número tudo o que parece número, e números guardam só 15 dígitosDefina a detecção de tipo de dados como Não detectar tipos de dados (Do not detect data types), para que toda coluna chegue como texto
Timestamps são ordenados como texto, não como datasAberto diretamente, o Excel deixa texto ISO 8601 como 2026-08-24T04:16:09Z como texto. Com a detecção de tipo desligada, toda coluna é textoEm Transformar Dados (Transform Data), mude o tipo da coluna para Data/Hora/Fuso Horário

Mapas e arrays chegam como texto em uma célula, porque uma célula guarda um valor. Se precisar dos campos deles como colunas, selecione a coluna em Transformar Dados (Transform Data) e use Analisar > JSON (Parse > JSON), depois expanda. Isso exige JSON válido em toda célula, o que o Firexport Advanced e o script abaixo sempre gravam; a versão gratuita grava o texto do console quando não consegue ler um valor de volta como JSON.

2. Gravar um arquivo .xlsx com um script do Admin SDK

Um script pode pular a etapa do CSV e gravar uma pasta de trabalho do Excel diretamente, com cada célula já no tipo certo: números como números, timestamps como datas e IDs como texto, então nada perde um zero à esquerda. Ele precisa do Node.js e de uma conta que possa ler o Firestore: um Proprietário ou Editor do projeto, ou o papel Leitor do Cloud Datastore.

  1. Instale o Admin SDK e o ExcelJS: npm install firebase-admin exceljs
  2. Faça login para obter credenciais locais: gcloud auth application-default login. Em um servidor, aponte GOOGLE_APPLICATION_CREDENTIALS para uma chave de conta de serviço.
  3. Salve o script abaixo como export-to-excel.mjs, substitua your-project-id e execute node 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`);
  • A pasta de trabalho tem uma planilha com o nome da coleção e uma linha de cabeçalho em negrito e congelada: uma coluna documentId e depois uma coluna por campo.
  • Timestamps são datas do Excel mostradas como yyyy-mm-dd hh:mm:ss, em UTC. Mapas, arrays e geopoints são texto JSON, e referências são caminhos de documento.
  • Uma planilha do Excel comporta 1.048.576 linhas, e o script mantém todas as linhas na memória até gravar o arquivo. Para coleções maiores, use o caminho do gcloud e BigQuery no guia de CSV.

Google Sheets

O Google Sheets abre os dois arquivos. Vá em Arquivo > Importar (File > Import), envie o CSV ou o .xlsx e escolha para onde ele vai (uma nova planilha, uma nova página ou a atual).

  • Para um CSV, defina o separador como Vírgula (ou deixe em Detectar automaticamente).
  • Desmarque Converter texto em números, datas e fórmulas (Convert text to numbers, dates, and formulas) se seus dados tiverem IDs, telefones ou códigos com zeros à esquerda. Senão o Sheets transforma “00123” em 123.
  • Uma planilha comporta 10 milhões de células no total, somando todas as páginas.

Perguntas frequentes

O Excel consegue se conectar ao Firestore diretamente?

Não com um conector integrado: o Obter Dados do Excel não tem uma fonte Firestore. Você exporta um arquivo primeiro, um CSV que o Excel importa ou um .xlsx que um script grava, como mostra este guia.

Por que o Excel mostra caracteres embaralhados como “José” no meu CSV?

O arquivo é UTF-8, mas não tem marca de ordem de bytes, então o Excel o lê na codificação legada do seu sistema. Use um CSV que comece com BOM (o do Firexport começa), ou importe com Dados > De Texto/CSV (Data > From Text/CSV) e defina Origem do Arquivo (File Origin) como 65001: Unicode (UTF-8).

Quantas linhas o Excel ou o Google Sheets comportam?

Uma planilha do Excel comporta 1.048.576 linhas, e uma célula, no máximo 32.767 caracteres. Uma planilha do Google Sheets comporta 10 milhões de células no total. Para coleções maiores, exporte para CSV com gcloud e BigQuery e trabalhe com os dados lá.

Exportar dados do Firestore custa dinheiro?

Todos os métodos leem cada documento exportado pelo menos uma vez, e o Firestore cobra isso como leituras de documento. Dentro da cota gratuita diária, não custa nada.