Pobieranie danych ze strony internetowej do Excela - Power Query i API
Kursy walut, notowania, tabela cen ze strony dostawcy. Jeśli co rano kopiujesz te same dane ze strony internetowej do Excela, to robisz pracę, którą Excel umie zrobić sam. Pobieranie danych ze strony do Excela przez Power Query ustawiasz raz, a potem odświeżasz jednym kliknięciem albo automatycznie co kilka minut.
W tym poradniku porównuję trzy sposoby importu danych do Excela: zwykłe kopiowanie, pobieranie tabeli ze strony przez Power Query i pobieranie przez API. Każdy na prawdziwym przykładzie z pliku do pobrania: notowania ze strony z kursami oraz tabela kursów walut prosto z Narodowego Banku Polskiego.
Najciekawszy jest trzeci sposób. API NBP jest darmowe, nie wymaga rejestracji ani klucza i oddaje gotowe kursy wszystkich walut. Jedno zapytanie i tabela kursów aktualizuje się sama.
W tym poradniku:
- Trzy sposoby importu danych ze strony
- Kopiowanie i wklejanie
- Pobieranie tabeli ze strony przez Power Query
- Pobieranie danych przez API na przykładzie NBP
- Automatyczne pobieranie danych: odświeżanie co kilka minut
- Podsumowanie
Trzy sposoby importu danych ze strony
- Kopiowanie i wklejanie wystarczy, gdy dane potrzebujesz raz i jest ich niewiele.
- Power Query sprawdza się, gdy na stronie jest tabela, którą chcesz pobierać regularnie, zawsze w tej samej postaci.
- API to najpewniejsza droga, jeśli serwis je udostępnia. Dane przychodzą w uporządkowanym formacie i nie psują się, kiedy ktoś zmieni wygląd strony.
Kopiowanie i wklejanie
Zaznaczasz tabelę na stronie, Ctrl + C, przechodzisz do Excela i Ctrl + V. Żeby nie przenieść kolorów i czcionek ze strony, użyj Wklej specjalnie (Ctrl + Alt + V) i wybierz tekst albo wklejanie z dopasowaniem do formatowania docelowego.
Ten sposób ma trzy wady, które wychodzą dopiero później:
- dane są zamrożone, więc jutro kopiujesz wszystko od nowa,
- liczby często wklejają się jako tekst i nie dają się zsumować,
- strona z kropką jako separatorem dziesiętnym daje w polskim Excelu daty albo tekst zamiast liczb, na przykład 3.05 zamienia się w 3 maja.
Pobieranie tabeli ze strony przez Power Query
Na karcie Dane kliknij Z sieci Web i wklej adres strony. Power Query wczyta stronę i w oknie Nawigator pokaże wszystkie tabele, jakie na niej znalazł, zwykle pod nazwami Table 0, Table 1 i dalej. Zakładka Widok sieci Web pokazuje stronę tak, jak wygląda w przeglądarce, co ułatwia wybór właściwej tabeli.
Zaznacz tabelę i kliknij Przekształć dane. W edytorze Power Query porządkujesz ją tak samo jak dane z pliku.
W pliku do pobrania jest zapytanie pobierające historyczne notowania z serwisu z kursami. Dane ze strony wymagały trzech poprawek, które powtarzają się przy wielu serwisach:
- Typy danych. Kolumny przychodzą jako tekst. Datę trzeba zmienić na datę, a kwoty na liczby.
- Separator tysięcy. Strona zapisywała kwoty z kropką co trzy cyfry. Zanim kolumna stanie się walutą, kropkę trzeba usunąć poleceniem Zamienianie wartości, inaczej Power Query uzna ją za część dziesiętną.
- Skróty jednostek. Wolumen był zapisany jak „35,21K” albo „1,2B”, czyli liczba z literą. Kolumnę dzielę na liczbę i literę (Podziel kolumnę > Według pozycji, ostatni znak osobno), a kolumna warunkowa zamienia literę na mnożnik.
Tak wygląda krok z mnożnikiem na pasku formuły. Wynik jest w milionach: K to tysiące, czyli 0,001 miliona, a B to miliardy, czyli 1000 milionów.
each if [#"Wol..2"] = "K" then 0.001 else if [#"Wol..2"] = "B" then 1000 else 1
Na koniec mnożę liczbę przez mnożnik (Dodaj kolumnę > Standardowe > Pomnóż) i usuwam kolumny pomocnicze.
Pobieranie tabeli ze strony ma jedną słabość: zapytanie zależy od układu strony. Kiedy serwis przebuduje tabelę albo zacznie ładować dane skryptem, zapytanie zwróci błąd albo pustą tabelę. Dlatego tam, gdzie jest API, lepiej z niego korzystać.

Pobieranie danych przez API na przykładzie NBP
API to adres, pod którym serwis udostępnia dane dla programów, a nie dla ludzi. Zamiast strony z tabelą dostajesz same dane w formacie JSON. Narodowy Bank Polski udostępnia tak tabele kursów walut, bez rejestracji i bez opłat.
W Excelu wybierz Dane > Z sieci Web i wklej adres aktualnej tabeli kursów średnich (tabela A):
https://api.nbp.pl/api/exchangerates/tables/A/?format=json
Power Query rozpozna JSON i pokaże listę z jednym elementem. Dalej trzy kroki rozwijania:
- Do tabeli zamienia listę na tabelę z jedną kolumną rekordów.
- Strzałki w nagłówku rozwijają rekord. Zostaw effectiveDate (data tabeli) i rates (lista kursów).
- Kolumnę rates rozwiń najpierw do nowych wierszy, a potem jeszcze raz jako rekord: currency, code i mid, czyli nazwa waluty, jej kod i kurs średni.
Po nadaniu typów i zmianie nazw kolumn zapytanie wygląda tak (wersja z pliku, skrócona o dwie zbędne kolumny):
let
Źródło = Json.Document(Web.Contents("https://api.nbp.pl/api/exchangerates/tables/A/")),
#"Przekonwertowane na tabelę" = Table.FromList(Źródło, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Rozwinięty element Column1" = Table.ExpandRecordColumn(#"Przekonwertowane na tabelę", "Column1", {"effectiveDate", "rates"}),
#"Rozwinięty element rates" = Table.ExpandListColumn(#"Rozwinięty element Column1", "rates"),
#"Rozwinięty element rates1" = Table.ExpandRecordColumn(#"Rozwinięty element rates", "rates", {"currency", "code", "mid"}),
#"Zmieniono typ" = Table.TransformColumnTypes(#"Rozwinięty element rates1", {{"effectiveDate", type date}, {"currency", type text}, {"code", type text}, {"mid", type number}}),
#"Zmieniono nazwy kolumn" = Table.RenameColumns(#"Zmieniono typ", {{"effectiveDate", "Data"}, {"currency", "waluta"}, {"code", "skrót"}, {"mid", "kurs"}})
in
#"Zmieniono nazwy kolumn"Wynik to tabela z kursami ponad trzydziestu walut z jednego dnia. Kursy z konkretnego dnia pobierzesz, dopisując datę do adresu, na przykład …/tables/A/2026-10-09/. NBP publikuje tabelę A w dni robocze, więc dla weekendu i świąt zapytanie z datą zwróci błąd.
Co dalej z takimi kursami, opisuję w dwóch poradnikach: import kursów NBP i przewalutowanie oraz przeliczanie waluty po kursie z wybranego dnia.
Automatyczne pobieranie danych: odświeżanie co kilka minut
Po załadowaniu zapytania do arkusza dane odświeżasz przyciskiem Dane > Odśwież wszystko. Żeby Excel robił to sam, w panelu Zapytania i połączenia kliknij zapytanie prawym przyciskiem myszy, wybierz Właściwości i zaznacz jedną z dwóch opcji:
- Odśwież co … min - dane pobierają się w tle, dopóki plik jest otwarty,
- Odśwież dane podczas otwierania pliku - każde otwarcie skoroszytu zaczyna się od świeżych danych.
Nie ustawiaj odświeżania częściej, niż dane się zmieniają. Kursy NBP zmieniają się raz dziennie, więc odświeżanie co minutę nic nie da, a obciąży i Twój komputer, i serwer.
Podsumowanie
Kopiowanie wystarczy do jednorazowej tabeli. Do danych, które wracają co dzień, użyj Power Query, a jeśli serwis ma API, sięgnij po nie w pierwszej kolejności. Na co uważać:
- Zapytanie do strony zależy od jej układu. Przebudowa strony potrafi je zepsuć bez ostrzeżenia, API jest odporne na takie zmiany.
- Separatory. Kropka i przecinek w liczbach ze stron zagranicznych mylą się z polskim zapisem. Popraw je przed zmianą typu na liczbę.
- Dane ładowane skryptem. Jeśli tabela na stronie pojawia się dopiero po chwili, Nawigator może jej nie zobaczyć. Wtedy szukaj API albo pliku do pobrania.
- Zasady serwisu. Nie każdy serwis pozwala pobierać dane automatycznie. Sprawdź regulamin, zanim ustawisz odświeżanie co kilka minut.
W pliku do pobrania są oba zapytania z tego artykułu. Zapytanie do serwisu z notowaniami może z czasem przestać działać, jeśli serwis zmieni stronę. To dobra okazja, żeby zobaczyć na własne oczy, dlaczego API jest pewniejsze.

Plik jest Twój bez zapisywania się na cokolwiek. Jeśli chcesz przejść Excela po kolei, zacznij od darmowego kursu.
Mirela, to nie błąd zapytania, tylko godzina publikacji. NBP publikuje tabelę A raz dziennie, w dni robocze około południa. Do tego czasu adres …/tables/A/ zwraca ostatnią opublikowaną tabelę, czyli wczorajszą, a w weekend i święta tę z ostatniego dnia roboczego. Wystarczy odświeżyć zapytanie po południu i data w effectiveDate zmieni się na dzisiejszą.
Jeśli chcesz mieć pewność, że to kurs z dzisiaj, możesz użyć adresu https://api.nbp.pl/api/exchangerates/tables/A/today/ - tylko że przed publikacją zwróci on błąd. Do raportu odświeżanego rano lepiej więc zostać przy zwykłym adresie.
Dlaczego pobierając dane do Exela z API, aktualna data jest z dnia poprzedniego. Czy da się to zmienić?