Jak eksportować e-maile do Excela / Arkuszy Google

Jeśli potrzebujesz swoich e-maili w arkuszu kalkulacyjnym, oto dokładna instrukcja. Dostępne są aplikacje, które analizują wiadomości e-mail i eksportują je wraz z wyodrębnionymi danymi do Arkuszy Google. ActorAi również może Ci w tym pomóc.

Oto zwięzła lista typowych zastosowań eksportowania e-maili do Excela lub Arkuszy Google:

  • Eksportuj zamówienia i powiadomienia o wysyłce.
  • Eksportuj kontakty pozyskane z e-maili, aby zaktualizować CRM lub bazę danych.
  • Wyszukuj adresy e-mail, na które nie udało się dostarczyć wiadomości, aby zarządzać listą.
  • Udostępniaj zespołom nierozwiązane problemy lub zgłoszenia za pomocą wspólnych arkuszy kalkulacyjnych.
  • Importuj uporządkowane dane z e-maili do baz danych lub aplikacji biznesowych.
  • Twórz kopie zapasowe i archiwizuj ważne e-maile służbowe.
  • Twórz listy dystrybucyjne na podstawie kontaktów i adresów.
  • Wyodrębniaj informacje finansowe i dane o wydatkach na potrzeby raportowania.

Eksportowanie e-maili z Gmaila do Arkuszy Google

Opcja A – z dodatkiem do Google Workspace (najłatwiejsza)

  • Otwórz Arkusze Google → Rozszerzenia → Dodatki.
  • Wyszukaj dodatek „Gmail to Sheets” (wybierz ten, który odpowiada Twoim potrzebom).
  • Zainstaluj dodatek i połącz konto Gmail.
  • Wybierz etykietę/folder lub filtr wyszukiwania.
  • Uruchom eksport → dane pojawią się w arkuszu.
  • Wskazówka: skonfiguruj automatyczne odświeżanie, aby dane aktualizowały się codziennie.

Opcja B – z użyciem Google Apps Script (metoda samodzielna)

  • Pobiera e-maile pasujące do wyszukiwania w Gmailu (etykieta, from:, subject:, after: itd.).
  • Zapisuje je w aktywnym arkuszu, porządkując dane w kolumnach
  • Dodaje menu niestandardowe: Eksport e-maili → Uruchom eksport
  • Pozwala określić zapytanie wyszukiwania, maksymalną liczbę e-maili oraz to, czy uwzględniać treść wiadomości

Konfiguracja Google Apps Script (samodzielna metoda eksportu do Excela)

  1. Otwórz nowy arkusz Google.
  2. Rozszerzenia → Apps Script.
  3. Usuń cały kod i wklej poniższy skrypt.
  4. Kliknij Zapisuj, a następnie Uruchom → onOpen() aby dodać menu niestandardowe.
  5. Wróć do arkusza i wybierz Eksport e-maili → Skonfiguruj arkusz (utworzy kartę „Konfiguracja” i nagłówki).
  6. Wpisz wyszukiwaną frazę w Config!B2 (przykłady poniżej), a następnie Eksport e-maili → Uruchom eksport.
/**************************************
 * 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();
}

Prosta wersja skryptu do Arkuszy 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);
}

Eksportowanie e-maili z Outlooka do Excela

1. Użyj metody eksportu do CSV w Outlooku:

  • Przejdź do  Plik > Otwórz i eksportuj > Importuj/Eksportuj.
  • Wybierz  Eksportuj do pliku  i wybierz  Wartości rozdzielane przecinkami (CSV).
  • Wybierz folder poczty e-mail, z którego chcesz eksportować wiadomości (np. Skrzynka odbiorcza).
  • Gdy pojawi się monit, kliknij  Mapuj pola niestandardowe  , aby wybrać tylko konkretne atrybuty wiadomości e-mail, których potrzebujesz, takie jak  Od,  Do,  Temat,  Data otrzymania, itp.
  • Dokończ eksport i otwórz plik CSV w Excelu, aby wyświetlić same metadane.

2. Filtruj i kopiuj metadane tekstowe w Outlooku:

  • Utwórz niestandardowy widok w Outlooku, w którym będą widoczne tylko wybrane kolumny (np. nadawca, data itp.).
  • Zaznacz wiadomości e-mail, skopiuj je, a następnie wklej do Excela.
  • Ta metoda może być szybsza w przypadku niewielkich partii, zwłaszcza jeśli eksportujesz tylko określone informacje z nagłówków lub metadane.

3. Użyj Power Query do dynamicznego eksportu:

  • Power Query w Excelu może łączyć się bezpośrednio z Outlookiem i pobierać tylko wymagane pola.
  • Ta metoda umożliwia bieżące aktualizacje i automatyzację, a jednocześnie ogranicza ilość danych do minimum.
  1. Otwórz Excela i przejdź do karty Dane.
  2. Wybierz kolejno Pobierz dane > Z innych źródeł > Z programu Microsoft Exchange.
  3. Wpisz swój adres e-mail w Outlooku i zaloguj się, aby nawiązać połączenie.
  4. Wybierz folder skrzynki pocztowej (np. Odebrane) zawierający potrzebne wiadomości e-mail.
  5. W Edytorze Power Query wybierz tylko potrzebne kolumny, takie jak Temat, Od, Do i Data otrzymania.
  6. Zastosuj filtry, aby zawęzić listę wiadomości e-mail, np. według daty lub nadawcy.
  7. Kliknij Zamknij i załaduj, aby zaimportować przefiltrowane dane wiadomości e-mail do tabeli w Excelu.
  8. Odświeżaj zapytanie w dowolnym momencie, aby zaktualizować dane o nowe lub zmienione wiadomości e-mail.

Uwaga: planujemy dodać tę funkcję do Actora jako aplikację do obsługi poczty e-mail. Obecnie sprawdzamy, czy jest nią zainteresowanie.

Uwaga: eksport do Excela lub Arkuszy Google nie robi różnicy. Oba narzędzia są świetne i zostały stworzone przez Google i Microsoft.

Teraz masz już e-maile w arkuszu kalkulacyjnym – gotowe do analizy, filtrowania lub udostępniania. Jeśli potrzebujesz robić to regularnie, konieczna będzie automatyzacja, która będzie powtarzać ten proces w wybranych przez Ciebie odstępach czasu.

Cześć, jestem ACTOR. Stworzono mnie, aby ułatwiać życie zapracowanym profesjonalistom, takim jak Ty.

Moją misją jest być najlepszym cyfrowym partnerem, jakiego możesz mieć: pomagać Ci pilnować harmonogramu, zarządzać pocztą e-mail i skupiać się na tym, co naprawdę ważne.

Filmy: pierwsze kroki

Nieustannie się uczę i doskonalę, bo z każdą interakcją chcę lepiej rozumieć Twoje potrzeby.

Pomyśl o mnie jak o niezawodnym drugim pilocie, który pomoże Ci zmniejszyć stres i odzyskać więcej cennego czasu.
Razem uporamy się z Twoją listą zadań, zadbamy o porządek i sprawimy, że każdy dzień będzie bardziej produktywny.

Pozwól mi zająć się drobiazgami, abyś mógł skupić się na szerszej perspektywie. Chcesz, by każdy dzień przebiegał sprawniej? Zaczynajmy!

Wypróbuj mnie tutaj

Uwaga: porównania i informacje zawarte w tym artykule/na tej stronie opierają się na ogólnodostępnych źródłach i mogą nie być w pełni wyczerpujące. Wszystkie wymienione nazwy produktów i marek są znakami towarowymi lub zarejestrowanymi znakami towarowymi należącymi do ich właścicieli.