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)
- Otwórz nowy arkusz Google.
- Rozszerzenia → Apps Script.
- Usuń cały kod i wklej poniższy skrypt.
- Kliknij Zapisuj, a następnie Uruchom → onOpen() aby dodać menu niestandardowe.
- Wróć do arkusza i wybierz Eksport e-maili → Skonfiguruj arkusz (utworzy kartę „Konfiguracja” i nagłówki).
- 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.
- Otwórz Excela i przejdź do karty Dane.
- Wybierz kolejno Pobierz dane > Z innych źródeł > Z programu Microsoft Exchange.
- Wpisz swój adres e-mail w Outlooku i zaloguj się, aby nawiązać połączenie.
- Wybierz folder skrzynki pocztowej (np. Odebrane) zawierający potrzebne wiadomości e-mail.
- W Edytorze Power Query wybierz tylko potrzebne kolumny, takie jak Temat, Od, Do i Data otrzymania.
- Zastosuj filtry, aby zawęzić listę wiadomości e-mail, np. według daty lub nadawcy.
- Kliknij Zamknij i załaduj, aby zaimportować przefiltrowane dane wiadomości e-mail do tabeli w Excelu.
- 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.
