Jakie są pułapki przy pobieraniu faktur z KSeF do Excela?
Przy przenoszeniu faktur z Krajowego Systemu e-Faktur do Excela czeka 5 typowych pułapek: XML otwarty bezpośrednio w Excelu zamienia się w chaos kolumn, kwoty zapisane jako tekst blokują formuły SUMA, limit API (~60 faktur/h na NIP) spowalnia masowe pobrania, polskie znaki zamieniają się w krzaczki gdy CSV zapisano bez BOM, a faktury pokazywane dwóm stronom transakcji generują duplikaty kwot. Każdej można uniknąć – albo ręcznie, albo używając narzędzia, które obsługuje je wszystkie automatycznie.
- XML z KSeF to schemat FA(3) z ~80 polami – Excel nie otworzy go jako tabeli bez parsera.
- Kwoty ze znakiem waluty lub spacją tysięczną trafiają do Excela jako tekst, nie liczby; SUMA zwraca 0.
- Limit API KSeF: ~60 faktur/h na NIP – masowe pobieranie wymaga batch z automatycznym retry.
-
CSV bez BOM (Byte Order Mark) otwiera się w Windows-1250 zamiast UTF-8 – polskie znaki wyglądają jak
Ÿółta. - Ta sama faktura widnieje w KSeF dla sprzedawcy i nabywcy – bez filtra na typ masz duplikaty sum.
W tym artykule
- Pułapka #1: XML otwarty w Excelu to chaos, nie tabela
- Pułapka #2: Kwoty jako tekst – SUMA() zwraca zero
- Pułapka #3: Limit 10 plików z portalu i ~60 faktur/h z API
- Pułapka #4: Polskie znaki zamieniają się w krzaczki
- Pułapka #5: Ta sama faktura pojawia się dwa razy
- 5 pułapek – skrócona tabela z rozwiązaniami
- Najczęstsze pytania
Od problemu do efektu
PWEKażde z 5 błędów pojawia się w innym momencie – od pobrania pliku, przez import, po analizę danych. Razem pochłaniają 2–4 godziny miesięcznie przy zaledwie 100 fakturach.
KSeF Import parsuje XML FA(3) do płaskiej tabeli, zapisuje kwoty jako typ liczbowy, dodaje BOM do CSV, respektuje limity API i rozdziela kosztowe od sprzedażowych – bez żadnego ręcznego czyszczenia.
Zamiast godzin czyszczenia danych dostajesz kompletny, uzgodniony plik Excel – zero duplikatów, zero błędów w kwotach, zero krzaczków w nazwach firm.
Pułapka #1: XML otwarty w Excelu to chaos, nie tabela
Faktura w KSeF to plik XML w schemacie FA(3) – ok. 80 pól zagnieżdżonych w sekcjach: dane wystawcy w <Podmiot1>, nabywcy w <Podmiot2>, pozycje w <Fa>, sumy VAT, oznaczenia GTU, flagi MPP. Struktura jest hierarchiczna i zoptymalizowana pod maszyny, nie pod człowieka.
Gdy otwierasz taki XML bezpośrednio w Excelu, program spłaszcza hierarchię do płaskiej tabeli. Efekt: kolumny z nazwami tagów (ns1:P_1, ns1:P_2), dane rozrzucone po dziesiątkach kolumn, pozycje faktury wymieszane z nagłówkiem. Formuły SUMA nie działają, bo komórki zawierają tekst zamiast liczb.
Kliknięcie prawym przyciskiem na pobranym XML → „Otwórz w Excelu". Wynik: widzisz tagi, nie dane. Nie da się tego naprawić ręcznie w sensownym czasie przy 100+ fakturach.
Rozwiązanie: Użyj parsera XML, który zna schemat FA(3). Ręcznie to arkusz XSLT wymagający wiedzy technicznej. Automatycznie – narzędzie takie jak KSeF Import, które parsuje XML i tworzy plik .xlsx z jedną fakturą na wiersz.
Pułapka #2: Kwoty jako tekst – SUMA() zwraca zero
Kopiujesz kwotę z podglądu faktury na portalu KSeF: 1 234,56 PLN. Wklejasz do komórki. Wygląda jak liczba – ale Excel traktuje to jako ciąg znaków. Formuła =SUMA(C2:C50) zwraca 0, tabela przestawna ignoruje wiersze, WYSZUKAJ.PIONOWO nie działa.
Problem ma trzy źródła naraz:
- Spacja tysięczna – „1 234" to dla Excela tekst, nie 1234. Polski format liczb używa spacji jako separatora tysięcy, ale Excel oczekuje liczby bez separatora.
- Sufiks „PLN" – portal KSeF wyświetla kwoty z dopiskiem waluty; po wklejeniu Excel widzi ciąg znaków.
- Kropka vs przecinek – w XML FA(3) separator dziesiętny to kropka (standard XML), w polskim Excelu to przecinek; kwota
1234.56z surowego XML zostaje tekstem.
Rozwiązanie ręczne: Znajdź i zamień – usuń „PLN", zamień spacje na nic, zamień kropkę na przecinek. Potem Dane → Tekst jako kolumny → Zakończ. Rozwiązanie automatyczne: eksport, który od razu zapisuje kwoty jako typ liczbowy w .xlsx – bez żadnego czyszczenia.
Zobacz, jak KSeF Import pobiera faktury kosztowe i układa je w gotowy arkusz.
Pułapka #3: Limit 10 plików z portalu i ~60 faktur/h z API
Portal KSeF pozwala pobrać maksymalnie 10 plików XML naraz. Przy 100 fakturach miesięcznie to 10 rund klikania: zaznacz 10 → pobierz → wróć → zaznacz kolejne 10. Każda runda: ~3 minuty. Łącznie: 30 minut samego klikania.
Jeśli próbujesz obejść to przez API KSeF, napotkasz inny limit. Endpoint pobierania faktur pozwala na około 60 żądań na godzinę dla kombinacji NIP+IP. Przy 100 fakturach to ~2 godziny czekania, nawet z automatycznym skryptem.
| Limit KSeF | Wartość | Dotyczy |
|---|---|---|
| Pliki z portalu | 10 naraz | Ręczne pobieranie |
| Faktury przez API /invoices | ~60/h na NIP | Skrypty i integracje |
| Zapytania metadanych | 20/h na NIP | Listing, wyszukiwanie |
| Żądania na sekundę | 8 req/s | Wszystkie endpointy łącznie |
| Zakres dat jednego zapytania | max 3 miesiące | dateRange – paczki po 85 dni |
Rozwiązanie: Automatyczny batch w tle, który respektuje limity API. KSeF Import pobiera faktury w porcjach, z automatycznym retry przy HTTP 429, i sam planuje kolejne rundy. Przy 100 fakturach: w tle – bez Twojego udziału. Więcej: masowe pobieranie faktur z KSeF.
Pułapka #4: Polskie znaki zamieniają się w krzaczki
Eksportujesz dane do CSV. Otwierasz w Excelu. Zamiast „Żółta Róża Sp. z o.o." widzisz ciąg znaków z daszkami, cyrkumfleksami i symbolami walut. Przyczyna: plik CSV zapisany w UTF-8, a Excel otwiera go w ANSI/Windows-1250 (domyślne dla polskiego Windowsa). UTF-8 zapisuje polskie litery jako 2 bajty – Excel czyta je jako 2 osobne znaki ANSI.
- Nazwy kontrahentów nieczytelne – nie znajdziesz „Łódzka Fabryka" wyszukiwarką.
- WYSZUKAJ.PIONOWO nie działa – porównanie „Żółta" z krzaczkiem zwraca #N/D.
- Import do FK się wysypie – Comarch Optima odrzuci wiersz z nieprawidłowymi znakami.
Zamknij plik. Otwórz Excel, wejdź w Dane → Z pliku tekstowego/CSV, ręcznie wybierz kodowanie UTF-8. Albo od razu eksportuj do .xlsx (Open XML) – który obsługuje Unicode natywnie i nie ma tego problemu w ogóle.
Rozwiązanie systemowe: Plik CSV z nagłówkiem BOM (Byte Order Mark) – 3 bajty na początku pliku mówiące Excelowi „to jest UTF-8". Lub eksport bezpośrednio do .xlsx. KSeF Import dodaje BOM do każdego CSV i oferuje .xlsx jako domyślny format. Więcej o formatach: Excel czy CSV – który format wybrać?
Pułapka #5: Ta sama faktura pojawia się dwa razy
KSeF pokazuje tę samą fakturę obu stronom transakcji. Faktura, którą firma A wystawiła firmie B, widnieje w KSeF jako:
- subject1 (sprzedawca) – firma A widzi ją jako swoją fakturę sprzedażową,
- subject2 (nabywca) – firma B widzi ją jako fakturę kosztową.
Problem pojawia się w dwóch scenariuszach:
- Holding / grupa kapitałowa – firma A sprzedaje firmie B, obie należą do tego samego właściciela. Jeśli pobierasz faktury dla obu NIP-ów do jednego arkusza, ta sama faktura pojawi się dwa razy – raz jako sprzedażowa, raz jako kosztowa.
- Pobieranie „wszystkich" bez filtra – ściągasz faktury bez podziału na kosztowe/sprzedażowe i możesz dostać duplikaty z obu stron transakcji dla tego samego NIP-u.
Podwójne kwoty w analizie kosztów, błędna podstawa VAT, rozbieżności z JPK_V7 – i trudno to wykryć bez ręcznego sortowania po numerze KSeF.
Rozwiązanie: Zawsze filtruj faktury po typie: kosztowe (jesteś nabywcą) osobno od sprzedażowych (jesteś wystawcą). Przy wielu NIP-ach – osobny arkusz per NIP. KSeF Import automatycznie rozdziela faktury na zakładki „Zakupy" i „Sprzedaż", a numer KSeF jest unikalny w ramach pary (NIP, typ), więc duplikaty nie przechodzą do arkusza.
5 pułapek – skrócona tabela z rozwiązaniami
Każdą pułapkę można obejść ręcznie – ale to 5 osobnych kroków za każdym razem. Poniżej zestawienie czasu straconego przy 100 fakturach miesięcznie i zalecanego rozwiązania.
| # | Pułapka | Stracony czas/mies. | Rozwiązanie |
|---|---|---|---|
| 1 | XML w Excelu = chaos kolumn | ~25 h (przy 100 FV bez parsera) | Parser FA(3) → .xlsx |
| 2 | Kwoty jako tekst | 30–45 min | Eksport z formatem liczbowym |
| 3 | Limit 10 XML + ~60/h API | 30–90 min | Automatyczny batch z retry |
| 4 | Polskie znaki = krzaczki | 20–40 min | UTF-8 BOM lub .xlsx |
| 5 | Duplikaty subject1/subject2 | 30–60 min | Filtr kosztowe/sprzedażowe |
KSeF Import obsługuje wszystkie 5 pułapek automatycznie: parsuje XML FA(3) do gotowego .xlsx, zapisuje kwoty jako typ liczbowy, dodaje BOM do CSV, respektuje limity API z retry i rozdziela zakupy od sprzedaży. Szczegółowy przewodnik eksportu: KSeF do Excel – pełny poradnik.
Najczęstsze pytania
Krótkie, konkretne odpowiedzi na pytania, które zadają użytkownicy i wyszukiwarki.
Excel 365 ma lepszy import XML (Power Query potrafi parsować zagnieżdżone struktury). Mimo to schemat FA(3) z ~80 polami i wariantami (faktura VAT, korekta, zaliczka) wymaga ręcznej konfiguracji mapowania. Power Query rozłoży dane, ale nie wie, że P_9A to cena netto, a P_11 to wartość netto. Nadal potrzebujesz transformacji albo gotowego parsera.
Posortuj arkusz po kolumnie Numer KSeF (35-znakowy identyfikator). Użyj formatowania warunkowego: Strona główna → Formatowanie warunkowe → Reguły wyróżniania komórek → Zduplikowane wartości. Podświetlone wiersze to duplikaty. Sprawdź, czy ten sam numer pojawia się raz jako kosztowa i raz jako sprzedażowa – to dwie strony tej samej transakcji, nie błąd. Duplikat to problem, gdy ten sam typ ma ten sam numer KSeF.
Nie. LibreOffice Calc przy otwieraniu CSV wyświetla okno dialogowe z wyborem kodowania – domyślnie proponuje UTF-8. Pułapka z polskimi znakami nie wystąpi, o ile wybierzesz prawidłowe kodowanie. Excel nie daje tego wyboru przy podwójnym kliknięciu na .csv i zakłada Windows-1250.
Zalogowanie + przejrzenie listy + pobranie 10 XML = ok. 3 minuty. Przy 100 fakturach to 10 rund × 3 minuty = 30 minut samego klikania. Dodaj parsowanie XML (20 min z Power Query, 2 godziny bez niego), czyszczenie kwot (30 min) i weryfikację (15 min). Łącznie: 1,5–3 godziny. Z automatycznym eksportem: ok. 30 sekund.
Zamknij plik w Excelu. Otwórz ponownie przez Dane → Z pliku tekstowego/CSV i ręcznie wybierz kodowanie UTF-8. Alternatywnie zamień plik na .xlsx – format Open XML obsługuje Unicode natywnie i nie ma tego problemu.
API KSeF udostępnia ok. 60 faktur na godzinę dla jednego NIP. Dodatkowo zapytania metadanych (listing faktur) są ograniczone do 20 na godzinę, a globalny limit dla wszystkich endpointów łącznie to 8 żądań na sekundę. Pojedyncze zapytanie obejmuje maksymalnie 3 miesiące. Narzędzia automatyczne jak KSeF Import respektują te limity i kompletują historię partiami w tle.
Inżynier integracji KSeF. Odpowiada za połączenia z API Krajowego Systemu e-Faktur, automatyzacje i parsowanie struktury logicznej FA(3).
