NIP z KRS w Excelu przez Power Query

Jednym z ciekawszych zastosowań, jakie znalazłem dla Power Query, jest pobieranie danych z Internetu za pomocą połączeń z API. Dla przykładu zaprezentuję metodę pozwalającą na szybkie pobranie danych z Krajowego Rejestru Sądowego. Informację będą dotyczyć organizacji zarejestrowanych w KRS i zaczytywane będą wyłącznie na podstawie ich NIPu wpisanego do arkusza Excel. W sieci można znaleźć wiele podobnych rozwiązań – w większości opartych na VBA, niestety głównie płatnych. Prezentowana przeze mnie metoda pobierania danych NIP z KRS w Excelu przez Power Query będzie przystępna dla każdego i całkowicie darmowa 🙂

Tworzymy arkusz Excel

Na początku zakładamy skoroszyt Excel, do którego będziemy pobierać dane z KRS. API, które nas interesuje zostało udostępnione na stronie: https://mojepanstwo.pl/api/krs
Do arkusza będziemy zaczytywać dane wg NIP (strona oferuje również inne filtry). Na potrzeby utworzenia połączenia interesuje nas poniższy fragment:

W naszym arkuszu wpisujemy nr NIP interesujących nas firm. Możemy zapisać jeden numer lub więcej. Wpisane dane zaczytujemy do Power Query wybierając opcję „Z tabeli/zakresu”.

Domyślnie numery NIP zaczytają się do zapytania jako liczby całkowite. W kolejnych krokach będziemy te numeru łączyć z linkiem API, który jest tekstem. Aby Power Query poprawnie przeprowadziło taka operację obie części musza być przechowywane pod postacią tekstową. Dlatego zmieniamy domyślny typ danych kolumny NrNIP na tekst.

Dodanie kolumny niestandardowej łączącej z API KRS

W następnym kroku zapytania dodajemy kolumnę niestandardową. Jako formułę wklejamy poniższe:
=Table.AddColumn(#"Zmieniono typ", "Kolumna", each Json.Document(Web.Contents("https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json?conditions[krs_podmioty.nip]="&[NrNIP])))

Dzięki temu zabiegowi numer przechowywany w tabeli w kolumnie NrNIP będzie łączył się z fragmentem linku do KRS z API. W efekcie tego kroku powstanie nowa kolumna przechowująca obiekty typu „Table”.

Klikając jednokrotnie na dowolny z nich zmienimy obiekt „Table” na „Record”. Następnie rozwijamy zawartość tych obiektów klikając dwie przeciwne strzałki w nagłówku. Domyślnie zaznaczone będą wszystkie nowe kolumny, nam potrzeba będzie tylko ta opisana jako „Dataobject”.

Nowa kolumna ponownie będzie zawierała obiekty typu „List”, rozwijamy je klikając w dwie przeciwne strzałki i wybierając „Rozwiń do nowych wierszy”.

Ponownie otrzymujemy obiekty typu „Record”. Znów rozwijamy ich zawartość strzałkami w nagłówku.

Przed nami jeszcze jedno, ostatnie rozwinięcie zawartości kolumny. Właśnie dokopaliśmy się do danych przechowywanych w Krajowym Rejestrze Sądowniczym. Do wyboru mamy teraz ponad 80 kolumn. W zależności od rodzaju spółki część z nich może być pusta. Tym razem pozostawiamy zaznaczone tylko te kolumny, których dane są nam potrzebne. Opcjonalnie odznaczamy checkbox „Użyj oryginalnej nazwy jako prefiksu” aby nadmiernie nie wydłużać nazw w nagłówkach kolumn.

Ładowanie danych do arkusza Excel

Zapytanie pobierające dane NIP z KRS w Excelu przez Power Query na podstawie połączenia z API jest zasadniczo gotowe. Pozostaje załadować je do arkusza Excel. Ja zaczytałem swoje tuż obok tabeli źródłowej ze sprawdzanymi numerami.
Chcąc sprawdzić inne numery wystarczy podkleić je w kolejnej wolnej komórce pod tabelą źródłową lub wstawić je w miejsce poprzednich. Następnie odświeżamy naszą tabelę wynikową i po kilku sekundach widzimy nowe dane zaczytane prosto z Krajowego Rejestru Sądowego 🙂

Kliknij aby zobaczyć inne wpisy o Power Query.

 

Cała treść wygenerowanego zapytania w języku M:

let
Źródło = Excel.CurrentWorkbook(){[Name="Tabela2"]}[Content],
#"Zmieniono typ" = Table.TransformColumnTypes(Źródło,{{"NrNIP", type text}}),
#"Dodano kolumnę niestandardową" = Table.AddColumn(#"Zmieniono typ", "Niestandardowe", each Table.AddColumn(#"Zmieniono typ", "Kolumna", each Json.Document(Web.Contents("https://api-v3.mojepanstwo.pl/dane/krs_podmioty.json?conditions[krs_podmioty.nip]="&[NrNIP])))),
Niestandardowe = #"Dodano kolumnę niestandardową"{1}[Niestandardowe],
#"Rozwinięty element Kolumna" = Table.ExpandRecordColumn(Niestandardowe, "Kolumna", {"Dataobject"}, {"Kolumna.Dataobject"}),
#"Rozwinięty element Kolumna.Dataobject" = Table.ExpandListColumn(#"Rozwinięty element Kolumna", "Kolumna.Dataobject"),
#"Rozwinięty element Kolumna.Dataobject1" = Table.ExpandRecordColumn(#"Rozwinięty element Kolumna.Dataobject", "Kolumna.Dataobject", {"data"}, {"Kolumna.Dataobject.data"}),
#"Rozwinięty element Kolumna.Dataobject.data" = Table.ExpandRecordColumn(#"Rozwinięty element Kolumna.Dataobject1", "Kolumna.Dataobject.data", {"krs_podmioty.regon", "krs_podmioty.siedziba", "krs_podmioty.wartosc_kapital_zakladowy", "krs_podmioty.nazwa", "krs_podmioty.adres_kod_pocztowy", "krs_podmioty.forma_prawna_str", "krs_podmioty.adres"}, {"krs_podmioty.regon", "krs_podmioty.siedziba", "krs_podmioty.wartosc_kapital_zakladowy", "krs_podmioty.nazwa", "krs_podmioty.adres_kod_pocztowy", "krs_podmioty.forma_prawna_str", "krs_podmioty.adres"})
in
#"Rozwinięty element Kolumna.Dataobject.data"



1 gwiazdka2 gwiazdki3 gwiazdki4 gwiazdki5 gwiazdek (2 głosów, średnia: 4,50 z 5)
Loading...


Powiązane

  1. Wygląda na to, że ten darmowy API którym się łączyłem i który był udostępniony na stronie https://mojepanstwo.pl/ został przeniesiony na rejestr.io i już niestety nie jest darmowy…
    W wolniejszej chwili rozejrzę się za innym darmowym źródłem. Dam znać jak uda mi się coś znaleźć. Jeśli nie to niestety zostanie tylko płatna wersja lub utworzenie własnej bazy z danymi z NIP.

    1. Maciej

      Witam, Posiadam klucz api ale chyba wygląda na to że bez vba się nie obejdzie.

      1. Maciej, jeśli możesz to podeślij proszę namiar na to API na excel@jakubkrupa.pl i zobaczymy co da się zrobić 🙂

    1. Dzięki za link 🙂 Zerknę na to w weekend.

      1. Tomek

        Mam nadzieję ze uda się to wykorzystać. 😉