Kursy

Plik CSV: co to jest i jak otworzyć w Excelu bez krzaczków

Plik CSV krok po kroku: jak otworzyć go w Excelu bez krzaczków, czemu w Polsce rozdziela go średnik i jak zapisać CSV z polskimi znakami.

Plik CSV otwarty w arkuszu - monitor na biurku w jasnym biurze pokazuje arkusz z wieloma wąskimi kolumnami i zielonym paskiem u góry, komórki rozmyte i nieczytelne, przed monitorem klawiatura i długopis, obok kubek z długopisami i stos segregatorów, w tle regał z segregatorami, okno i roślina
Spis treści
  1. Plik CSV: co to jest i jak wygląda w środku
  2. Jak otworzyć plik CSV w Excelu krok po kroku
  3. Dlaczego w Polsce separatorem jest średnik
  4. Krzaczki i pytajniki w CSV: kodowanie znaków
  5. Jak PowerShell zapisuje CSV: pomiar w Windows PowerShell 5.1
  6. Jak zapisać plik CSV w Excelu, żeby otworzył się u innych
  7. CSV w Pythonie: odczyt i zapis z polskimi znakami
  8. Gdzie spotkasz pliki CSV w pracy
  9. Najczęstsze pytania
  10. Podsumowanie

Plik CSV to zwykły plik tekstowy z tabelą: każdy wiersz pliku to wiersz tabeli, a kolumny rozdziela przecinek albo średnik. W polskim Excelu otworzy się poprawnie, gdy zgadzają się dwie rzeczy: znak, który rozdziela kolumny, i kodowanie polskich liter. Dane w jednej kolumnie to zły separator. Krzaczki w miejscu “ą” czy “ł” to złe kodowanie. Oba problemy naprawisz w Excelu poleceniem Dane → Z tekstu/pliku CSV, gdzie sam wybierasz kodowanie i ogranicznik. Jest też trzeci przypadek, którego nie naprawi już nic: znaki zapytania w miejscu liter. 5 listopada 2026 roku sprawdziliśmy w Windows PowerShell 5.1, że polecenie Export-Csv bez dodatkowych opcji zapisuje “Łódź” jako “??d?”. Instrukcje Excela pochodzą z polskich stron pomocy Microsoftu dla Excela w Microsoft 365, 2024, 2021, 2019 i 2016.

Plik CSV: co to jest i jak wygląda w środku

CSV (od angielskiego comma-separated values, wartości rozdzielane przecinkami) to format zapisu tabeli w zwykłym tekście. Nie ma w nim formatowania, formuł, kolorów ani kilku arkuszy. Są tylko wartości. Dlatego CSV otworzy wiele narzędzi: Notatnik, Excel, arkusz w przeglądarce albo program napisany w Pythonie. Do tego służy: przenosi dane między systemami, na przykład z banku, sklepu internetowego albo programu księgowego do arkusza.

Najczęściej cytowany opis formatu to RFC 4180 z października 2005 roku. Sam dokument zastrzega, że nie jest standardem, tylko opisuje to, co robi większość programów. Najważniejsze zasady z punktu 2:

  • każdy rekord stoi w osobnym wierszu, a wiersze kończy para znaków CR LF, czyli koniec wiersza w stylu Windows; ostatni rekord może go nie mieć;
  • pierwszy wiersz może być nagłówkiem z nazwami kolumn;
  • pola rozdziela przecinek, a każdy wiersz powinien mieć tyle samo pól;
  • pole z przecinkiem, cudzysłowem albo końcem wiersza bierze się w cudzysłów;
  • cudzysłów w środku takiego pola zapisuje się podwójnie, na przykład "b""bb".

Tak wygląda mała tabela w tym formacie otwarta w Notatniku:

Miasto;Kwota;Kod
Łódź;12,5;00-950

To ten sam plik, który zapisaliśmy w Pythonie w sekcji niżej. Kolumny rozdziela w nim średnik, bo tak zapisuje CSV polski Excel. Format pokrewny, czyli JSON, opisaliśmy w tekście JSON: co to jest i jak otworzyć plik JSON. CSV przechowuje płaską tabelę, JSON także dane zagnieżdżone.

Jak otworzyć plik CSV w Excelu krok po kroku

CSV w Excelu otworzysz na dwa sposoby: podwójnym kliknięciem albo przez import z karty Dane. Pierwszy jest szybki, ale nie pyta o nic. Drugi pozwala wybrać kodowanie i separator, więc to on rozwiązuje problemy z polskimi znakami.

Podwójne kliknięcie albo Plik → Otwórz

Według pomocy Microsoftu Excel otwiera plik .csv automatycznie i pokazuje dane w nowym skoroszycie. Kolumny interpretuje według bieżących ustawień formatu danych. W praktyce oznacza to ustawienia regionalne Windows. Gdy plik ma inny separator niż system albo inne kodowanie, dostajesz jedną kolumnę albo krzaczki.

Otwarcie nie zmienia formatu pliku. Na pasku tytułu nadal zobaczysz rozszerzenie .csv, a po zapisie dalej będzie to tekst bez formatowania.

Import przez Dane → Z tekstu/pliku CSV

Ten sposób opisuje strona pomocy Microsoftu o importowaniu plików tekstowych. Nazwy opcji podajemy w brzmieniu z polskich stron pomocy:

  1. Otwórz pusty skoroszyt i przejdź na kartę Dane.
  2. W grupie Pobieranie & przekształcanie danych kliknij Z tekstu/pliku CSV.
  3. Wskaż plik i kliknij Importuj.
  4. W oknie podglądu ustaw Pochodzenie pliku, czyli kodowanie. Wybierz to, przy którym polskie litery w podglądzie wyglądają dobrze. W polskich plikach to zwykle UTF-8 albo Windows-1250.
  5. Z listy Ogranicznik wybierz znak, który rozdziela kolumny: średnik, przecinek albo tabulator. Efekt widać od razu w podglądzie.
  6. Kliknij Załaduj. Jeśli chcesz najpierw poprawić dane, wybierz Przekształć dane, a plik otworzy się w Power Query.

Pole Pochodzenie pliku opisuje instrukcja Microsoftu dla Outlooka, która pokazuje konwersję CSV w Excelu właśnie tym oknem. Excel zaimportuje najwyżej 1 048 576 wierszy i 16 384 kolumn.

Zera wiodące i daty: Kreator importu tekstu

Kody pocztowe, numery klientów i daty Excel lubi zmieniać po swojemu. Pomoc Microsoftu wskazuje na to Kreatora importu tekstu. Pozwala on oznaczyć kolumnę jako tekst, żeby zachować zera na początku, i ustawić format daty, na przykład gdy w pliku miesiąc stoi przed dniem. Kreator uruchomi się, jeśli przed otwarciem zmienisz rozszerzenie pliku z .csv na .txt.

Dlaczego w Polsce separatorem jest średnik

Excel w polskim Windows rozdziela kolumny średnikiem, bo bierze separator listy z ustawień regionalnych systemu, a w Polsce przecinek jest separatorem dziesiętnym. Gdyby kolumny też rozdzielał przecinek, kwota “12,5” rozpadłaby się na dwie komórki. Na naszym komputerze z Windows 11 PowerShell podał 5 listopada 2026 roku dla kultury pl-PL separator listy ; i separator dziesiętny ,.

Stąd bierze się najczęstsza awaria. Plik z zagranicznego systemu jest rozdzielony przecinkami, a polski Excel szuka średnika. Wszystko ląduje w kolumnie A. W drugą stronę jest tak samo: plik z polskiego Excela trafia do programu, który oczekuje przecinków.

Pomoc Microsoftu podaje dwie drogi zmiany separatora przy zapisie. Pierwsza dotyczy tylko Excela: w Opcje → Zaawansowane wyczyść Używaj separatorów systemowych i ustaw separator dziesiętny. Według Microsoftu przecinek jako separator dziesiętny wymusza średnik jako separator listy. Druga zmienia ustawienie w całym Windows 11, czyli we wszystkich programach:

  1. W pasku wyszukiwania wpisz Ustawienia regionu.
  2. Wybierz Ustawienia języka administracyjnego.
  3. Na karcie Formaty wybierz Ustawienia dodatkowe.
  4. Na karcie Numery w polu Separator listy wpisz nowy znak i dwa razy kliknij OK.

Przy jednym pliku od kontrahenta prościej jest wybrać ogranicznik przy imporcie. Zmiana systemowa ma sens wtedy, gdy codziennie pracujesz z plikami z jednego zagranicznego źródła.

Krzaczki i pytajniki w CSV: kodowanie znaków

Kodowanie to sposób, w jaki litera zamienia się w bajty na dysku. Krzaczki pojawiają się, gdy program odczytuje plik innym kodowaniem, niż został zapisany. Litery “Łódź” w dwóch kodowaniach, które spotkasz w polskich plikach CSV (pomiar w Pythonie 3.14.3, 5 listopada 2026 roku):

KodowanieBajty słowa “Łódź”Co zobaczysz przy złym odczycie
UTF-8C5 81 C3 B3 64 C5 BA (7 bajtów)odczytane jako Windows-1250: Ĺ�ĂłdĹş
Windows-1250 (strona kodowa 1250)A3 F3 64 9F (4 bajty)odczytane jako UTF-8: ��d�
ASCII z PowerShella 5.13F 3F 64 3F??d? przy każdym odczycie

Krzaczki z dwóch pierwszych wierszy są odwracalne. Bajty w pliku są dobre, więc wystarczy otworzyć plik jeszcze raz z właściwym kodowaniem w polu Pochodzenie pliku. Znaki zapytania z ostatniego wiersza są trwałe. Program zamienił każdą polską literę na bajt 3F, czyli zwykły znak ?, i oryginału w pliku już nie ma. Takie dane trzeba wyeksportować jeszcze raz. Tablicę kodów, w której 3F to znak zapytania, pokazujemy w tekście o kodzie ASCII.

BOM, czyli trzy bajty na początku pliku

BOM to znacznik EF BB BF na samym początku pliku, który mówi programowi: to jest UTF-8. Według pomocy Microsoftu plik w formacie CSV zapisany w UTF-8 “można otworzyć normalnie, jeśli został zapisany ze znacznikiem kolejności bajtów (BOM)”. Bez BOM trzeba go zaimportować przez Dane → Z tekstu/pliku CSV. Czy plik ma BOM, sprawdzisz w PowerShell poleceniem Format-Hex -Path plik.csv. Pierwsze trzy bajty EF BB BF oznaczają UTF-8 z BOM.

Jak PowerShell zapisuje CSV: pomiar w Windows PowerShell 5.1

Windows PowerShell 5.1, wbudowany w Windows 10 i 11, zapisuje CSV domyślnie w ASCII i z przecinkiem. W praktyce gubi więc polskie litery i nie pasuje do polskiego Excela. Dokumentacja Export-Csv podaje: “The default value is ASCII”. Sprawdziliśmy to 5 listopada 2026 roku na Windows 11 (PowerShell 5.1.26100.9711, kultura pl-PL, strona kodowa ANSI 1250). Zapisaliśmy obiekt z polami Miasto = “Łódź” i Kwota = 12.5 pięcioma wariantami polecenia:

PolecenieSeparatorPoczątek pliku“Łódź” w pliku
Export-Csv -NoTypeInformation,bez BOM??d? (3F 3F 64 3F)
Export-Csv -NoTypeInformation -UseCulture;bez BOM??d?
Export-Csv -NoTypeInformation -Encoding UTF8,EF BB BFŁódź
Export-Csv -NoTypeInformation -Encoding UTF8 -UseCulture;EF BB BFŁódź
Export-Csv -NoTypeInformation -Encoding UTF8 -Delimiter ';';EF BB BFŁódź

We wszystkich wariantach kwota trafiła do pliku jako "12,5", z przecinkiem dziesiętnym z polskich ustawień. W wariancie z przecinkiem jako separatorem cudzysłów chroni ją przed rozbiciem, ale polski Excel i tak szuka średnika. Do polskiego Excela pasuje dopiero -Encoding UTF8 razem z -UseCulture albo -Delimiter ';'. Opcja -UseCulture według dokumentacji bierze separator z (Get-Culture).TextInfo.ListSeparator. W nowszym PowerShell 7.5 domyślne kodowanie to UTF-8 bez BOM, więc polskie litery zostają, ale Excel bez importu może ich nie odczytać.

Jak zapisać plik CSV w Excelu, żeby otworzył się u innych

Zapisz plik w Excelu jako Plik CSV UTF-8 (rozdzielany przecinkami) (*.csv). To typ pliku z listy Zapisz jako typ w oknie Zapisywanie jako, podany na stronie pomocy Microsoftu. UTF-8 zachowa polskie litery, a odbiorca w innym systemie ich nie zgubi. Lista ma też starsze typy: CSV (rozdzielany przecinkami), CSV (Macintosh) i CSV (MS-DOS).

Przed zapisem pamiętaj o trzech rzeczach z pomocy Microsoftu:

  • do pliku CSV trafia tylko bieżący arkusz, każdy kolejny trzeba zapisać osobno;
  • formatowanie, formuły i inne funkcje skoroszytu przepadają, zostają same wartości;
  • separator listy w pliku pochodzi z ustawień regionalnych, więc w polskim Windows zwykle będzie to średnik.

Jeśli odbiorca, na przykład system zagranicznego sklepu, wymaga przecinka, zapytaj o to przed eksportem. Zmień separator dla Excela albo zapisz plik z poziomu programu, w którym separator ustawisz wprost. Oryginał trzymaj jako .xlsx, a CSV traktuj jak kopię do wysłania.

CSV w Pythonie: odczyt i zapis z polskimi znakami

W Pythonie CSV obsłuży moduł csv z biblioteki standardowej, bez instalowania czegokolwiek. Dwie rzeczy decydują o polskich znakach: kodowanie utf-8-sig i parametr newline='', który dokumentacja modułu csv każe ustawiać przy otwieraniu plików dla modułu csv. Kodowanie utf-8-sig według dokumentacji modułu codecs przy odczycie pomija BOM, a przy zapisie go dopisuje. Zapis pliku czytelnego dla polskiego Excela:

import csv

with open("dane.csv", "w", encoding="utf-8-sig", newline="") as f:
    w = csv.writer(f, delimiter=";")
    w.writerow(["Miasto", "Kwota", "Kod"])
    w.writerow(["Łódź", "12,5", "00-950"])

with open("dane.csv", encoding="utf-8-sig", newline="") as f:
    for row in csv.reader(f, delimiter=";"):
        print(row)

W naszym pomiarze 5 listopada 2026 roku (Python 3.14.3) plik zaczął się od EF BB BF 4D 69 61 73 74 6F 3B, czyli od BOM, słowa “Miasto” i średnika. Odczyt zwrócił ['Miasto', 'Kwota', 'Kod'] i ['Łódź', '12,5', '00-950']. Ten sam plik otwarty jako zwykłe utf-8 dał w pierwszej komórce niewidoczny znak  przed słowem “Miasto”. Plik z przecinkami czytany w Pythonie z ustawionym średnikiem dał jedną kolumnę Łódź,"12,5". Od Pythona 3.15 tryb UTF-8 jest domyślny (PEP 686), ale jawne encoding= i tak warto zostawić. Więcej o tej zmianie piszemy w tekście o Pythonie 3.15 i polskich znakach.

Gdzie spotkasz pliki CSV w pracy

CSV to najprostszy wspólny język programów, które ze sobą nie rozmawiają. Bank daje w nim historię rachunku, sklep internetowy listę zamówień, a program księgowy zestawienie faktur. Dane przenosi się w nim też do systemu CRM i z powrotem. W automatyzacjach CSV bywa wejściem albo wyjściem przepływu, na przykład w n8n, które opisaliśmy w przewodniku po automatyzacji n8n. Gdy w arkuszu trzeba połączyć dwa takie eksporty po numerze klienta, przyda się WYSZUKAJ.PIONOWO.

Przy wymianie plików między firmami najwięcej kłopotów oszczędza jedno ustalenie z góry: kodowanie UTF-8 z BOM, średnik jako separator i nagłówek w pierwszym wierszu. Warto je spisać w umowie albo w dokumentacji integracji.

Devstock { integracje systemów }

Sklep, księgowość i CRM nie rozmawiają ze sobą?

Łączymy systemy, których używasz na co dzień, z KSeF, Allegro i BaseLinkerem, żeby dane przestały krążyć w arkuszach i mailach. Zaczynamy od połączenia, które dziś zabiera najwięcej czasu.

Zobacz, co łączymy → Software house, który prowadzi ten blog

Najczęstsze pytania

Czym otworzyć plik CSV, jeśli nie mam Excela?

Dowolnym edytorem tekstu, na przykład Notatnikiem, bo CSV to zwykły tekst. W edytorze zobaczysz surowe wiersze i separatory, co pomaga sprawdzić, czy plik rozdziela średnik, czy przecinek. Jako tabelę otworzysz go też w innym arkuszu kalkulacyjnym. Tam również szukaj importu z wyborem kodowania i separatora.

Jak sprawdzić kodowanie pliku CSV?

Najpewniej po pierwszych bajtach. W PowerShell wpisz Format-Hex -Path plik.csv. Początek EF BB BF oznacza UTF-8 z BOM. Jeśli BOM nie ma, zaimportuj plik przez Dane → Z tekstu/pliku CSV i zmieniaj Pochodzenie pliku, aż polskie litery będą poprawne w podglądzie.

Czym CSV różni się od XLSX?

CSV to sam tekst z jedną tabelą. XLSX to skoroszyt Excela: kilka arkuszy, formuły, formatowanie i wykresy. Zapis do CSV zachowuje tylko wartości z bieżącego arkusza. CSV jest za to czytelny dla prawie każdego programu i systemu.

Czy plik CSV może mieć kilka arkuszy?

Nie. Jeden plik w tym formacie to jedna tabela. Według pomocy Microsoftu Excel przy zapisie do CSV zapisuje tylko bieżący arkusz, a każdy kolejny trzeba zapisać jako osobny plik.

Podsumowanie

Plik CSV to tabela zapisana zwykłym tekstem, w której kolumny rozdziela przecinek albo, w polskich ustawieniach, średnik. Gdy Excel pokazuje wszystko w jednej kolumnie, plik ma inny separator niż system. Krzaczki w miejscu polskich liter oznaczają inne kodowanie niż przy zapisie. Oba problemy rozwiąże import przez Dane → Z tekstu/pliku CSV z wyborem Pochodzenia pliku i Ogranicznika. Znaków zapytania zamiast liter nie cofnie żaden import, bo program, który zapisał plik, wyrzucił te litery. Tak zrobił w naszym pomiarze PowerShell 5.1 bez opcji -Encoding UTF8. Pliki dla innych zapisuj jako Plik CSV UTF-8 (rozdzielany przecinkami), w PowerShell dodaj -Encoding UTF8 -UseCulture, a w Pythonie encoding="utf-8-sig".

Co dalej

Więcej z działu Narzędzia i automatyzacja