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 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 para actualizaciones de CRM o bases de datos.
  • Analizar direcciones de correo rebotadas para la gestión de listas.
  • Compartir incidencias o solicitudes abiertas con equipos usando hojas de cálculo compartidas.
  • Importar datos estructurados de correos a bases de datos o aplicaciones empresariales.
  • Realizar copias de seguridad y archivar correos electrónicos comerciales 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” (elige el que se adapte 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 de cálculo.
  • Consejo: configura la actualización automática para que se actualice diariamente.

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

  • Extrae correos que coinciden con una búsqueda de Gmail (etiqueta:, de:, asunto:, después:, etc.)
  • Los 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 cálculo 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 vuelta 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 simple del script 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 de Outlook a Excel

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

  • Navegar 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 en Mapear campos personalizados para seleccionar solo los atributos específicos del correo que necesita, 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 (como remitente, fecha, etc.).
  • Selecciona los correos, cópialos y pégalos en Excel.
  • Este método puede ser más rápido para lotes pequeños, especialmente si solo exportas información de cabecera específica o metadatos.

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

  • Power Query en Excel puede conectarse directamente a Outlook y filtrar solo los campos requeridos.
  • 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 (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 reducir los correos, por ejemplo por fecha o remitente.
  7. Haga clic en Cerrar y Cargar para importar los datos de correo filtrados en una tabla de Excel.
  8. Actualice la consulta en cualquier momento para incorporar correos nuevos o modificados a sus datos.

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

Nota: exportar a Excel frente a Hojas de cálculo de Google no marca ninguna diferencia. Ambos son excelentes herramientas, desarrolladas 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 repetitiva, 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 en orden, gestionar tus correos o ayudarte a centrarte en lo que realmente importa.

Vídeos: primeros pasos

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

Piensa en mí como tu copiloto de confianza, aquí para reducir tu estrés y devolverte más de tu tiempo valioso.
Juntos conquistaremos tu lista de tareas, mantendremos el orden y haremos que cada día sea más productivo.

Déjame encargarme de las cosas pequeñas para que puedas centrarte 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 completamente exhaustivas. Todos los nombres de productos y marcas mencionados son marcas comerciales o marcas registradas de sus respectivos propietarios.