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. Hay aplicaciones que analizan y exportan 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 leads por correo electrónico para CRM o actualizaciones de base de datos.
  • Analizar direcciones de correo rebotadas para la gestión de listas.
  • Compartir incidencias o solicitudes abiertas con los equipos usando hojas de cálculo compartidas.
  • Importar datos estructurados de correos electrónicos en bases de datos o aplicaciones empresariales.
  • Hacer copias 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 de 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” (elija el que se adapte a sus necesidades)
  • Instalar y conectar la cuenta de Gmail.
  • Seleccionar etiqueta/carpeta o filtro de búsqueda.
  • Ejecutar exportación → los datos aparecen en su hoja.
  • Consejo: configure la actualización automática para que se actualice diariamente.

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

  • Extrae correos electrónicos que coincidan con una búsqueda de Gmail (etiqueta, from:, subject:, after:, etc.)
  • Los escribe en la hoja activa con columnas limpias
  • 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 cálculo de Google.
  2. Extensiones → Apps Script.
  3. Elimina cualquier código y pega el script a continuación.
  4. Haz clic en Guardar, luego EjecutaronOpen() para agregar el menú personalizado.
  5. De vuelta en la hoja, ve a Exportar correo → Configurar hoja (crea una pestaña Config y encabezados).
  6. Introduce tu 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 Hojas de cálculo de Google.

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 de Outlook a Excel

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

  • Navega a Archivo > Abrir y exportar > Importar/Exportar.
  • Elige Exportar a un archivo y selecciona Valores separados por comas (CSV).
  • Selecciona la carpeta de correo electrónico desde la que quieres exportar (p. ej., Bandeja de entrada).
  • Cuando se solicite, haz clic en Asignar campos personalizados para seleccionar solo los atributos de correo específicos que necesitas, como DeParaAsuntoFecha de recepción, etc.
  • Completa la exportación y abre el CSV en Excel para ver solo los metadatos.

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

  • Crea una vista personalizada en Outlook con solo las columnas deseadas visibles (por ejemplo, remitente, fecha, etc.).
  • Selecciona los correos, cópialos y pégalos en Excel.
  • Este método puede ser más rápido para pequeños lotes, especialmente si solo vas a exportar información de cabecera específica o metadatos.

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 > De 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 (p. ej., 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 Fecha de recepción.
  6. Aplica filtros para acotar los correos, por ejemplo por fecha o remitente.
  7. Haz clic en Cerrar y cargar para importar los datos filtrados de correo en una tabla de Excel.
  8. Actualiza la consulta en cualquier momento para incorporar correos nuevos o modificados a tus datos.

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. Ambas 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 con regularidad, necesitarás algún tipo de automatización para hacerlo de forma repetida, 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 valioso tiempo.
Juntos conquistaremos 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 concentrarte en el panorama general. ¿Listo para hacer tu día 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 disponible públicamente y pueden no ser totalmente exhaustivas. Todos los nombres de productos y marcas mencionados son marcas comerciales o marcas registradas de sus respectivos propietarios.