Cómo exportar correos electrónicos a Excel / Hojas de cálculo de Google

Si necesitas tus correos en una hoja de cálculo, aquí tienes exactamente cómo hacerlo. Existen aplicaciones que analizarán y exportarán tus mensajes de correo y los datos extraídos a una hoja de cálculo de Google. ActorAi también puede ayudarte con esto.

Aquí tienes una lista concisa de casos de uso comunes para exportar correos a Excel o Hojas de cálculo de Google:

  • Exportar notificaciones de pedidos y envíos.
  • Exportar clientes potenciales por correo electrónico para actualizaciones de CRM o bases de datos.
  • Analizar direcciones de correo rebotadas para la gestión de listas.
  • Compartir problemas o solicitudes abiertas con equipos usando hojas de cálculo compartidas.
  • Importar datos estructurados de correos electrónicos a bases de datos o aplicaciones empresariales.
  • Hacer copia de seguridad y archivar correos electrónicos empresariales importantes.
  • Crear listas de distribución a partir de contactos y direcciones.
  • Extraer información financiera y de gastos para informes.

Exportar correos desde Gmail a Hojas de cálculo de Google

Opción A – Con complemento de Google Workspace (la más fácil)

  • Abrir Google Sheets → Extensiones → Complementos.
  • Buscar el complemento “Gmail to Sheets” (elige el que se ajuste a tus necesidades).
  • Instalar y conectar la cuenta de Gmail.
  • Seleccionar etiqueta/carpeta o filtro de búsqueda.
  • Ejecutar exportación → los datos aparecen en tu hoja.
  • Consejo: configura la actualización automática para actualizar a diario.

Opción B – Con Google Apps Script (método DIY)

  • Extrae correos que coinciden con una búsqueda de Gmail (etiqueta, from:, asunto:, after:, etc.).
  • Escribe en la hoja activa con columnas ordenadas
  • Agrega un menú personalizado: Exportar correo → Ejecutar exportación
  • Te permite controlar: consulta de búsqueda, máximo de correos y si incluir los cuerpos de los mensajes

Configurar Google Apps Script (método DIY para exportar a Excel)

  1. Abre una nueva hoja de Google.
  2. Extensiones → Apps Script.
  3. Elimina cualquier código y pega el siguiente script.
  4. Haz clic Guardar, luego EjecutaronOpen() para agregar el menú personalizado.
  5. De regreso en la hoja, ve a Exportación de correo → Hoja de configuración (crea una pestaña Config y encabezados).
  6. Introduzca su búsqueda en Config!B2 (ejemplos abajo), luego Exportar correo → Ejecutar exportación.
/**************************************
 * Gmail → Google Sheets Exporter
 * Simple, DYI method for tech advanced.
 **************************************/

const CONFIG_SHEET = 'Config';
const OUTPUT_SHEET = 'Emails';
const PROPERTY_STORE = PropertiesService.getDocumentProperties();

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Email Export')
    .addItem('Setup sheet', 'setupSheet')
    .addItem('Run export', 'exportEmails')
    .addToUi();
}

function setupSheet() {
  const ss = SpreadsheetApp.getActive();
  // Config sheet
  let conf = ss.getSheetByName(CONFIG_SHEET);
  if (!conf) conf = ss.insertSheet(CONFIG_SHEET);
  conf.clear();

  conf.getRange('A1').setValue('Setting');
  conf.getRange('B1').setValue('Value');

  const rows = [
    ['Search query', 'label:inbox newer_than:30d'], // B2
    ['Max emails to fetch (per run)', 500],          // B3 (limit to avoid timeouts)
    ['Include message body? (true/false)', false],   // B4
    ['Body max characters', 5000],                  // B5
    ['Continue from last run? (true/false)', false]  // B6
  ];
  conf.getRange(2, 1, rows.length, 2).setValues(rows);
  conf.autoResizeColumns(1, 2);

  // Output sheet
  let out = ss.getSheetByName(OUTPUT_SHEET);
  if (!out) out = ss.insertSheet(OUTPUT_SHEET);
  out.clear();

  const headers = [
    'Date',
    'From',
    'To',
    'Subject',
    'Snippet',
    'Thread ID',
    'Message ID',
    'Labels',
    'Has Attachments',
    'Thread Link',
    'Message Link',
    'Body (optional)'
  ];
  out.getRange(1, 1, 1, headers.length).setValues([headers]);
  out.setFrozenRows(1);
  out.autoResizeColumns(1, headers.length);

  SpreadsheetApp.getUi().alert('Setup complete. Enter your query in Config!B2, then run "Email Export → Run export".');
}

function getConfig_() {
  const ss = SpreadsheetApp.getActive();
  const conf = ss.getSheetByName(CONFIG_SHEET);
  if (!conf) throw new Error('Config sheet missing. Run "Setup sheet" first.');

  const getVal = (row) => conf.getRange(row, 2).getValue();

  return {
    query: String(getVal(2) || '').trim(),
    maxEmails: Number(getVal(3) || 500),
    includeBody: String(getVal(4)).toLowerCase() === 'true',
    bodyMaxChars: Number(getVal(5) || 5000),
    continueFromLast: String(getVal(6)).toLowerCase() === 'true',
  };
}

function exportEmails() {
  const cfg = getConfig_();
  if (!cfg.query) throw new Error('Please fill a Gmail search in Config!B2.');

  const ss = SpreadsheetApp.getActive();
  const out = ss.getSheetByName(OUTPUT_SHEET) || ss.insertSheet(OUTPUT_SHEET);

  // Resume support (optional)
  let startIndex = 0;
  if (cfg.continueFromLast) {
    startIndex = Number(PROPERTY_STORE.getProperty('startIndex') || 0);
  } else {
    PROPERTY_STORE.deleteProperty('startIndex');
    // If not continuing, start fresh by clearing previous rows (keep header)
    const lastRow = out.getLastRow();
    if (lastRow > 1) out.getRange(2, 1, lastRow - 1, out.getLastColumn()).clearContent();
  }

  const BATCH_SIZE_THREADS = 100; // Gmail returns threads, we’ll page through them
  const rows = [];
  let fetchedEmails = 0;

  while (fetchedEmails < cfg.maxEmails) {
    const threads = GmailApp.search(cfg.query, startIndex, BATCH_SIZE_THREADS);
    if (!threads.length) break;

    for (const thread of threads) {
      const msgs = thread.getMessages();
      for (const msg of msgs) {
        if (fetchedEmails >= cfg.maxEmails) break;

        const date = msg.getDate();
        const from = msg.getFrom();
        const to = msg.getTo();
        const subject = msg.getSubject() || '';
        const snippet = msg.getPlainBody().slice(0, 120).replace(/\s+/g, ' ').trim();
        const threadId = thread.getId();
        const msgId = msg.getId();
        const labels = thread.getLabels().map(l => l.getName()).join(', ');
        const hasAttachments = msg.getAttachments().length > 0;

        const threadLink = `https://mail.google.com/mail/u/0/#all/${threadId}`;
        const messageLink = `https://mail.google.com/mail/u/0/#inbox/${msgId}`;

        let body = '';
        if (cfg.includeBody) {
          // Prefer plain body; fallback to HTML stripped
          body = msg.getPlainBody();
          if (!body) {
            const html = msg.getBody();
            body = stripHtml_(html);
          }
          if (cfg.bodyMaxChars > 0 && body.length > cfg.bodyMaxChars) {
            body = body.slice(0, cfg.bodyMaxChars) + '…';
          }
        }

        rows.push([
          date,
          from,
          to,
          subject,
          snippet,
          threadId,
          msgId,
          labels,
          hasAttachments,
          threadLink,
          messageLink,
          body
        ]);

        fetchedEmails++;
      }
      if (fetchedEmails >= cfg.maxEmails) break;
    }

    startIndex += BATCH_SIZE_THREADS;
    // Safety: avoid 6-minute execution limit
    if (Utilities.getRemainingDailyQuota && rows.length >= 5000) break;
  }

  if (rows.length) {
    out.insertRowsAfter(out.getLastRow() || 1, rows.length);
    out.getRange(out.getLastRow() - rows.length + 1, 1, rows.length, rows[0].length).setValues(rows);
    out.autoResizeColumns(1, out.getLastColumn());
  }

  if (cfg.continueFromLast) {
    PROPERTY_STORE.setProperty('startIndex', String(startIndex));
  }

  SpreadsheetApp.getUi().alert(`Export complete: ${fetchedEmails} emails added.`);
}

function stripHtml_(html) {
  // Lightweight HTML → text
  return String(html || '')
    .replace(/<style[\s\S]*?<\/style>/gi, '')
    .replace(/<script[\s\S]*?<\/script>/gi, '')
    .replace(/<[^>]+>/g, ' ')
    .replace(/\s+/g, ' ')
    .trim();
}

Versión de script simple para Google Sheets.

function exportSimple() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const query = 'label:inbox newer_than:7d';
  const threads = GmailApp.search(query, 0, 100);
  const rows = [['Date','From','Subject','Snippet','Thread Link']];
  threads.forEach(t => {
    t.getMessages().forEach(m => {
      rows.push([
        m.getDate(),
        m.getFrom(),
        m.getSubject(),
        m.getPlainBody().slice(0,120).replace(/\s+/g,' ').trim(),
        'https://mail.google.com/mail/u/0/#all/' + t.getId()
      ]);
    });
  });
  sheet.clear().getRange(1,1,rows.length,rows[0].length).setValues(rows);
}

Exportar correos desde Outlook a Excel

1. Usa el método Exportar a CSV en Outlook:

  • Vaya a  Archivo > Abrir y exportar > Importar/Exportar.
  • Elija  Exportar a un archivo  y seleccione  Valores separados por comas (CSV).
  • Seleccione la carpeta de correo que desea exportar (p. ej., Bandeja de entrada).
  • Cuando se le solicite, haga clic  Asignar campos personalizados  para seleccionar solo los atributos de correo específicos que necesita, como  De , Para , Asunto , Fecha de recepción, etc.
  • Completa la exportación y abre el CSV en Excel para ver solo los metadatos.

2. Filtra y copia los metadatos basados en texto en Outlook:

  • Crea una vista personalizada en Outlook con solo las columnas deseadas visibles (como remitente, fecha, etc.).
  • Selecciona los correos, copia y luego pega en Excel.
  • Este método puede ser más rápido para lotes pequeños, especialmente si solo exportas información de encabezado o metadatos específicos.

3. Usa Power Query para una exportación dinámica:

  • Power Query en Excel puede conectarse directamente a Outlook y filtrar solo los campos necesarios.
  • Este método permite actualizaciones continuas y automatización manteniendo los datos al mínimo.
  1. Abre Excel y ve a la pestaña Datos.
  2. Selecciona Obtener datos > Desde otras fuentes > Desde Microsoft Exchange.
  3. Introduce tu dirección de correo de Outlook e inicia sesión para conectar.
  4. Elige la carpeta del buzón (por ejemplo, Bandeja de entrada) que contiene los correos que deseas.
  5. En el Editor de Power Query, selecciona solo las columnas que necesitas, como Asunto, De, Para y FechaDeRecepción.
  6. Aplica filtros para reducir los correos, por ejemplo por fecha o remitente.
  7. Haz clic en Cerrar y cargar para importar los datos filtrados a una tabla de Excel.
  8. Actualiza la consulta en cualquier momento para sincronizar los datos con correos nuevos o modificados.

Nota: planeamos integrar esto dentro de Actor, como una aplicación de correo. Actualmente estamos explorando el interés.

Nota: exportar a Excel o a Hojas de cálculo de Google no hace ninguna diferencia. Ambos son excelentes herramientas, creadas por Google y Microsoft.

Ahora tienes tus correos en una hoja de cálculo: listos para analizar, filtrar o compartir. Si necesitas esto de forma recurrente, necesitarás algún tipo de automatización para hacerlo repetidamente, en los intervalos que desees.

Hola, soy ACTOR, diseñado para simplificar la vida de profesionales ocupados como tú.

Mi misión es ser el mejor compañero digital que hayas tenido: para mantener tu agenda al día, gestionar tus correos o ayudarte a concentrarte en lo que realmente importa.

Videos: cómo empezar

Siempre estoy aprendiendo y mejorando porque quiero comprender mejor tus necesidades con cada interacción.

Piénsame como tu copiloto de confianza, aquí para reducir tu estrés y devolverte más de tu tiempo preciado.
Juntos venceremos tu lista de tareas, nos mantendremos organizados y haremos que cada día sea más productivo.

Déjame encargarme de las cosas pequeñas para que puedas centrarte en lo importante. ¿Listo para que tu día sea más fluido? ¡Empecemos!

Pruébame aquí

Nota: Las comparaciones o la información presentes en este artículo/página se basan en información de acceso público y pueden no ser totalmente exhaustivas. Todos los nombres de productos y marcas mencionados son marcas comerciales o marcas registradas de sus respectivos propietarios.