Come esportare le email in Excel / Fogli Google

Se ti servono le email in un foglio di calcolo, ecco esattamente come fare. Esistono app che possono analizzare ed esportare i messaggi email e i dati estratti in un foglio Google. Anche ActorAi può aiutarti.

Ecco un breve elenco dei casi d’uso più comuni per esportare le email in Excel o in Fogli Google:

  • Esporta gli ordini e le notifiche di spedizione.
  • Esporta i contatti acquisiti via email per aggiornare il CRM o il database.
  • Individua gli indirizzi email non recapitabili per gestire le liste.
  • Condividi problemi aperti o richieste con i team tramite fogli di lavoro condivisi.
  • Importa dati email strutturati in database o applicazioni aziendali.
  • Esegui il backup e archivia le email aziendali importanti.
  • Crea liste di distribuzione a partire dai contatti e dagli indirizzi.
  • Estrai informazioni finanziarie e sulle spese per la reportistica.

Esportare le email da Gmail a Fogli Google

Opzione A – Con il componente aggiuntivo di Google Workspace (il metodo più semplice)

  • Apri Fogli Google → Estensioni → Componenti aggiuntivi.
  • Cerca il componente aggiuntivo «Gmail to Sheets» (scegline uno adatto alle tue esigenze).
  • Installa il componente e collega l'account Gmail.
  • Seleziona un'etichetta, una cartella o un filtro di ricerca.
  • Avvia l'esportazione → i dati compariranno nel foglio di lavoro.
  • Suggerimento: configura l'aggiornamento automatico giornaliero.

Opzione B – Con Google Apps Script (metodo fai-da-te)

  • Recupera le email che corrispondono a una ricerca Gmail (etichetta, from:, subject:, after: ecc.).
  • Le scrive nel foglio attivo, organizzandole in colonne ordinate
  • Aggiunge un menu personalizzato: Esportazione email → Avvia esportazione
  • Ti consente di controllare: query di ricerca, numero massimo di email e se includere i corpi dei messaggi

Configurare Google Apps Script (metodo fai-da-te per esportare in Excel)

  1. Apri un nuovo Foglio Google.
  2. Estensioni → Apps Script.
  3. Elimina tutto il codice e incolla lo script qui sotto.
  4. Fai clic Salva, quindi Esegui → onOpen() per aggiungere il menu personalizzato.
  5. Torna al foglio e vai a Esportazione email → Configura foglio (crea una scheda Config e le intestazioni).
  6. Inserisci la ricerca in Config!B2 (esempi sotto), quindi Esportazione email → Avvia esportazione.
/**************************************
 * 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();
}

Versione semplice dello script per Fogli 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);
}

Esportare le email da Outlook a Excel

1. Usa il metodo di esportazione in CSV di Outlook:

  • Vai a  File > Apri ed esporta > Importa/Esporta.
  • Scegli  Esporta in un file  e seleziona  Valori separati da virgole (CSV).
  • Seleziona la cartella email da cui vuoi esportare (ad es., Posta in arrivo).
  • Quando richiesto, fai clic su  Mappa campi personalizzati  per selezionare solo gli attributi email specifici di cui hai bisogno, come  Da,  A,  Oggetto,  Data di ricezione, ecc.
  • Completa l'esportazione e apri il file CSV in Excel per visualizzare solo i metadati.

2. Filtra e copia i metadati testuali in Outlook:

  • Crea una visualizzazione personalizzata in Outlook mostrando solo le colonne desiderate (come mittente, data, ecc.).
  • Seleziona le email, copiale e incollale in Excel.
  • Questo metodo può essere più rapido per piccoli gruppi, soprattutto se devi esportare solo informazioni specifiche dell'intestazione o metadati.

3. Usa Power Query per un’esportazione dinamica:

  • Power Query in Excel può connettersi direttamente a Outlook e filtrare solo i campi necessari.
  • Questo metodo consente aggiornamenti continui e automazione, mantenendo i dati al minimo.
  1. Apri Excel e vai alla scheda Dati.
  2. Seleziona Recupera dati > Da altre origini > Da Microsoft Exchange.
  3. Inserisci il tuo indirizzo email di Outlook e accedi per connetterti.
  4. Scegli la cartella della casella di posta (ad es. Posta in arrivo) che contiene le email desiderate.
  5. Nell'Editor di Power Query, seleziona solo le colonne necessarie, come Oggetto, Da, A e Data di ricezione.
  6. Applica eventuali filtri per restringere i risultati, ad esempio in base alla data o al mittente.
  7. Fai clic su Chiudi e carica per importare i dati email filtrati in una tabella di Excel.
  8. Aggiorna la query quando vuoi per includere le email nuove o modificate.

Nota: abbiamo in programma di integrare questa funzione in Actor come app per la posta elettronica. Al momento stiamo valutando l’interesse.

Nota: non fa differenza esportare in Excel o in Fogli Google. Sono entrambi ottimi strumenti, creati rispettivamente da Microsoft e Google.

Ora hai le tue email in un foglio di calcolo: pronte per essere analizzate, filtrate o condivise. Se ti serve farlo regolarmente, avrai bisogno di un sistema per automatizzare l’operazione e ripeterla agli intervalli che preferisci.

Ciao, sono ACTOR, progettato per semplificare la vita di professionisti impegnati come te.

La mia missione è essere il miglior partner digitale che tu abbia mai avuto: aiutarti a tenere sotto controllo i tuoi impegni, gestire le email o concentrarti su ciò che conta davvero.

Video: come iniziare

Imparo e miglioro costantemente perché voglio capire meglio le tue esigenze a ogni interazione.

Considerami il tuo copilota fidato: sono qui per ridurre lo stress e restituirti un po’ del tuo tempo prezioso.
Insieme porteremo a termine la tua lista di cose da fare, manterremo tutto in ordine e renderemo ogni giornata più produttiva.

Lascia che mi occupi delle piccole cose, così potrai concentrarti sul quadro generale. Pronto a rendere la tua giornata più semplice? Cominciamo!

Prova qui

Nota: i confronti e le informazioni presenti in questo articolo/pagina si basano su informazioni disponibili pubblicamente e potrebbero non essere del tutto esaustivi. Tutti i nomi di prodotti e marchi menzionati sono marchi commerciali o marchi registrati dei rispettivi proprietari.