Przejdź do treści

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.

⚡ Import ze stron WWW, plików i folderów krok po kroku
W kursie Power Query Podstawowy pobieranie danych ze strony internetowej ma osobną lekcję, obok importu z CSV, TXT, PDF i wielu plików naraz. Lekcje wideo: 26, zadania z rozwiązaniami: 17.
Zobacz kurs →

W tym poradniku:

  1. Trzy sposoby importu danych ze strony
  2. Kopiowanie i wklejanie
  3. Pobieranie tabeli ze strony przez Power Query
  4. Pobieranie danych przez API na przykładzie NBP
  5. Automatyczne pobieranie danych: odświeżanie co kilka minut
  6. 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:

  1. Typy danych. Kolumny przychodzą jako tekst. Datę trzeba zmienić na datę, a kwoty na liczby.
  2. 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ą.
  3. 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ć.

⚡ Power Query
Import ze strony WWW to jedna lekcja. W kursie jest cały zestaw źródeł
✓Pobieranie danych ze strony internetowej i z PDF
✓Import z CSV, TXT i wielu plików w folderze jednym zapytaniem
✓Scalanie, grupowanie i kolumna przestawna
✓Lekcje wideo: 26 · zadania z rozwiązaniami: 17
Zobacz program kursu
🛡 Gwarancja zwrotu 30 dni · ⚡ Dostęp natychmiastowy
Kurs Power Query Podstawowy

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:

  1. Do tabeli zamienia listę na tabelę z jedną kolumną rekordów.
  2. Strzałki w nagłówku rozwijają rekord. Zostaw effectiveDate (data tabeli) i rates (lista kursów).
  3. 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.

⚡ Power Query Zaawansowany
Kursy walut z API NBP z parametrami. Następny krok po tym poradniku
✓Pobieranie kursów walut z API NBP przy użyciu parametrów
✓Parametry i dynamiczna ścieżka do źródła danych
✓Własne funkcje w Power Query i język M
✓Gwarancja zwrotu: 30 dni
Zobacz kurs zaawansowany
🛡 Gwarancja zwrotu 30 dni · ⚡ Dostęp natychmiastowy
Kurs Power Query Zaawansowany
Pobierz plik ćwiczeniowy

Plik jest Twój bez zapisywania się na cokolwiek. Jeśli chcesz przejść Excela po kolei, zacznij od darmowego kursu.

2 opinii

  1. Piotr Czujak

    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.

  2. Mirela

    Dlaczego pobierając dane do Exela z API, aktualna data jest z dnia poprzedniego. Czy da się to zmienić?

Dodaj komentarz

Twoja ocena

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *