Ecom house logo

Import i eksport danych w Magento 2

Opublikowano: 17 lipca 2026

Magento ma natywne narzędzia do masowego importu i eksportu danych - Products, Customers, Stock Sources, Customer Addresses, Advanced Pricing, Tax Rates. Wszystko przez CSV. Ten poradnik pokazuje, jak ich używać i kiedy sięgnąć po moduły zewnętrzne.

System > Import - natywny import

Ścieżka: System > Data Transfer > Import

Wybór encji

Encje (Entity Type), które można importować:

Encja Opis
Products Produkty - wszystkie typy (simple, configurable, virtual, ...).
Customers and Addresses (single file) Klienci wraz z adresami w jednym CSV.
Customers Main File Klienci (bez adresów).
Customer Addresses Adresy klientów.
Customer Finances Saldo klienta (Commerce).
Advanced Pricing Ceny tieryczne, ceny per Customer Group.
Stock Sources (MSI) Stany magazynowe per source (MSI).
Tax Rates Stawki podatkowe.

Import Behavior

Kluczowa decyzja przy każdym imporcie:

Behavior Działanie
Add/Update Dodaje nowe, aktualizuje istniejące po kluczu (SKU / email).
Replace Usuwa istniejące i tworzy od nowa. Niebezpieczne dla produkcji.
Delete Usuwa rekordy wymienione w CSV.
Custom Action Tylko dla niektórych encji - pozwala wybrać sposób per kolumna.

Replace = usuwa dane: Behavior Replace dla produktów usuwa wszystkie dane produktu (zdjęcia, opisy, atrybuty) i tworzy go od nowa z CSV. Powiązania z kategoriami, atrybutami i opcjami giną.

W praktyce na produkcji używaj Add/Update - to bezpieczna opcja.

Pełny flow importu

  1. System > Data Transfer > Import.
  2. Wybierz Entity Type (np. Products).
  3. Wybierz Import Behavior (zwykle Add/Update).
  4. Validation Strategy - wybierz Stop on Error lub Skip Error Entries.
  5. Allowed Errors Count - ile błędów może wystąpić zanim Magento przerwie (domyślnie 10).
  6. Field separator - , (przecinek).
  7. Multiple value separator - , (dla wielowartościowych pól).
  8. Empty attribute value constant - __EMPTY__VALUE__ (tekstowa wartość oznaczająca "wyczyść atrybut").
  9. Fields enclosure - " (cudzysłów).
  10. Wgraj plik CSV (uwaga: limit serwera, zwykle upload_max_filesize).
  11. Kliknij Check Data - Magento waliduje plik bez wprowadzania zmian.
  12. Jeśli walidacja przeszła → Import.

Walidacja

Check Data zwraca raport:

  • Checked rows: X, Checked entities: Y, Invalid rows: Z, Total errors: N
  • Lista konkretnych błędów z numerem wiersza i kolumny.

Najczęstsze błędy:

  • "SKU is empty" - brakuje kluczowej kolumny.
  • "Invalid value for attribute" - wartość nie pasuje do typu atrybutu.
  • "Attribute not found" - kolumna w CSV której Magento nie zna.
  • "Encoding" - plik nie jest UTF-8.

System > Export - natywny eksport

Ścieżka: System > Data Transfer > Export

Wybór encji

Te same encje co przy imporcie. Eksport zwraca CSV z aktualnym stanem bazy.

Filtr eksportu

W formularzu eksportu możesz filtrować dane:

  • Per Store View (np. eksport tylko sklepu PL).
  • Per Attribute Set (np. tylko produkty z AS "Clothes").
  • Per Status (Enabled / Disabled).
  • Custom filters - można odznaczyć kolumny których nie chcesz eksportować.

Kliknij Continue - Magento wygeneruje CSV i zaproponuje pobranie.

Małe vs duże eksporty: Natywny eksport działa synchronicznie - przy 100k+ SKU może timeoutować w przeglądarce. Dla bardzo dużych eksportów użyj:

  • ecomhouse-exporter - asynchroniczny eksport przez consumery.
  • CLI: niektóre encje można eksportować bezpośrednio z bazy (SELECT ... INTO OUTFILE).

Format CSV - kluczowe zasady

Encoding

Zawsze UTF-8 bez BOM. Excel domyślnie zapisuje UTF-8 z BOM, co psuje pierwszą kolumnę.

Konwersja Excel → UTF-8 bez BOM:

  • LibreOffice Calc - Save As → CSV → Edit Filter Settings → Character Set: UTF-8 → uncheck "Add BOM".
  • Python: pandas.read_csv(...).to_csv(out, encoding="utf-8").
  • VS Code - Save with Encoding → UTF-8 (without BOM).

Separator

Magento natywnie używa przecinka. Niektóre kolumny (multiselect) używają wewnętrznego separatora - domyślnie przecinka, ale można zmienić w formularzu importu na | żeby uniknąć konfliktów.

Pola wielowartościowe

Multiselect / multi-store-view → wartości oddzielone separatorem multi-value:

sku,categories
PROD-001,"Default Category,Electronics,Smartphones"

Cudzysłów

Jeśli wartość zawiera przecinek, otocz ją cudzysłowem:

sku,description
PROD-001,"Telefon, smartfon, gadget"

Pusta wartość vs wyczyść atrybut

  • Pusta kolumna w CSV → Magento ignoruje to pole, atrybut zostaje bez zmian.
  • Wartość __EMPTY__VALUE__ → Magento wyczyści atrybut.

Sample files

Magento dostarcza wzory CSV dla każdej encji:

System > Data Transfer > Import > Download Sample File (przycisk po wyborze Entity Type).

Wzór zawiera:

  • Wszystkie obsługiwane kolumny.
  • Przykładowe wartości.
  • Komentarze (gdzie są wskazówki).

Zawsze zaczynaj od wzoru - nie buduj CSV od zera.

Typowe scenariusze

Scenariusz 1: Import 5000 nowych produktów

  1. Pobierz sample file dla Products.

  2. Wypełnij dane (SKU, name, price, attribute_set_code, type_id, etc).

  3. Validation Strategy = Skip Error Entries.

  4. Check Data → poprawiaj błędy iteracyjnie aż walidacja przejdzie czysto.

  5. Import.

  6. Reindex + cache flush:

    bin/magento indexer:reindex
    bin/magento cache:flush
    

Scenariusz 2: Update cen 50000 produktów

Natywny import - Behavior = Add/Update, CSV tylko z kolumnami sku i price.

Dla bardzo dużych zmian (>100k SKU) - patrz ecomhouse-qtyfastupdate (specjalizowany dla qty, podobnie można zrobić dla price).

Scenariusz 3: Migracja klientów ze starego sklepu

  1. Eksport ze starego sklepu → CSV.
  2. Customers and Addresses (single file) w Magento - najwygodniejsze.
  3. Wymagane kolumny: email, _website, firstname, lastname.
  4. Behavior = Add/Update.

Hasła klientów: Magento nie umie zaimportować zahashowanych haseł ze starego systemu (różne algorytmy). Po imporcie klienci muszą zresetować hasło (link "Forgot Password") przy pierwszym logowaniu.

Można importować klientów z password_hash natywnym Magento (bcrypt) - ale wtedy musisz wcześniej rehashować całą bazę.

Scenariusz 4: Eksport produktów do hurtowni / marketplace

  1. System > Data Transfer > Export > Products.
  2. Zaznacz kolumny które chcesz eksportować.
  3. Filtr per attribute_set_code jeśli chcesz tylko określoną grupę.
  4. Continue → pobierz CSV.

Dla cyklicznych eksportów (raz dziennie) - patrz ecomhouse-exporter.

Scenariusz 5: Import setek plików CSV

Natywny import obsługuje jeden plik na raz. Dla wielu plików:

  • ecomhouse-importqueue - masowy import wszystkich CSV z katalogu przez CLI.

Najczęstsze problemy

"File is large. Allowed file size is X MB"

Limit upload_max_filesize PHP. Edycja php.ini:

upload_max_filesize = 256M
post_max_size = 256M
memory_limit = 1024M
max_execution_time = 1800
max_input_time = 1800

Restart PHP-FPM. Lub: importuj plik CLI zamiast przez panel (omija limity HTTP).

"Invalid value in 'attribute_set_code' field"

Wartość w CSV musi pasować do dokładnej nazwy Attribute Set (case-sensitive). Sprawdź dostępne:

Stores > Attributes > Attribute Set - kolumna Name (nie ID).

Pola Page Builder / opis HTML rozsypują się po imporcie

Problem z encodingiem cudzysłowów / przecinków w HTML. Zalecane:

  • Otaczaj wartości cudzysłowem.
  • Cudzysłowy w wartości escapuj podwojeniem: ""tekst"".
  • Zachowaj całość HTML w jednym wierszu (bez \n) - niektóre wersje Excel rozdzielają wieloliniowe komórki.

"Url key for specified store already exists"

Dwa produkty mają ten sam url_key. Magento nie pozwala. Rozwiązania:

  • Wymuś unikalność w CSV (np. dodać SKU do url_key).
  • Lub: w Stores > Configuration > Catalog > Catalog > Search Engine Optimization > Use Categories Path for Product URLs = Yes.

Wszystkie wiersze pomijane mimo czystej walidacji

Sprawdź encoding (UTF-8 bez BOM) i separator (, nie ;).

Import trwa godzinami i nie kończy się

  • Set indexers to schedule mode przed importem:

    bin/magento indexer:set-mode schedule
    
  • Wyłącz Catalog Search reindex w trakcie:

    bin/magento indexer:set-mode schedule catalogsearch_fulltext
    
  • Rozważ podział pliku na mniejsze (5000-10000 wierszy / plik) + ecomhouse-importqueue.

CLI alternatywa

Natywny Magento ma CLI dla importu (Magento 2.4+):

bin/magento import:products /path/to/products.csv

Ograniczone do produktów, ale szybsze i bez limitów HTTP.


Powiązane