Importieren: Spaltennamen haben Duplikate

9

Beim Import wird die Fehlermeldung "Spaltennamen haben Duplikate" angezeigt, aber ich habe keine Duplikate.

Wen kann ich das beheben?

"_type","sku","has_options","name","image","small_image","thumbnail","url_key","url_path","price","manufacturer","status","tax_class_id","visibility","description","short_description","gift_message_available","qty","min_qty","is_qty_decimal","backorders","min_sale_qty","max_sale_qty","is_in_stock","notify_stock_qty","manage_stock","qty_increments","enable_qty_increments"
"simple","1174407","0","BCI-15BK Tintenpatrone schwarz","","","","","","22.000","Canon","Enabled","none","Catalogue,Search","BCI-15BK Tintenpatrone schwarz, 2er-Pack, für I70                    NSTintenpatronenOriginalML","BCI-15BK Tintenpatrone schwarz, 2er-Pack, für I70                    NSTintenpatronenOriginalML","","0","","","0","1","","","","","","0"

Download-Datei

Ich habe sichergestellt, dass alle meine Felder auch in exportiertem CSV vorhanden sind. Vermisse ich einige erforderliche Zeilen? Ich habe versucht zu überprüfen, aber diese Wiki-Seite von 2012 erfordert Spalten, die nicht einmal in der exportierten Datei enthalten sind. Ich bin mir also nicht sicher, welche Columens benötigt werden.

Die PHP-Version ist 5.2.17

PiTheNumber
quelle
Führen Sie einen Export durch und vergleichen Sie, dass Sie denselben Satz von Spalten haben.
user487772
Nun, ich weiß nicht, aber ich habe die benötigten Spalten. Was fehlt mir hier?
PiTheNumber
Welche Art von Import verwenden Sie?
user487772
Der /admin/import, nicht der alte Datenfluss.
PiTheNumber
Dann haben die meisten Spalten in
Ihrem

Antworten:

13

Die Ausnahme mit der von Ihnen angegebenen Fehlermeldung wird an genau einer Stelle ausgelöst (Code aus Gründen der Lesbarkeit leicht abgeschnitten):

final public function __construct($source)
{
    $this->_source = $source;

    $this->_init();

    // validate column names consistency
    if (is_array($this->_colNames) && !empty($this->_colNames)) {
        $this->_colQuantity = count($this->_colNames);

        if (count(array_unique($this->_colNames)) != $this->_colQuantity) {
            Mage::throwException(Mage::helper('importexport')->__('Column names have duplicates'));
        }
    }
}

Dies bedeutet, count(array_unique($this->_colNames))muss ungleich sein$this->_colQuantity

Das $_colNamesArray wird in gesetzt Mage_ImportExport_Model_Import_Adapter_Csv::rewind()(was während aufgerufen wird _init().
Wiederum wird der Code aus Gründen der Lesbarkeit leicht abgeschnitten:

public function rewind()
{
    // rewind resource, reset column names, read first row as current
    rewind($this->_fileHandler);
    $this->_colNames = fgetcsv($this->_fileHandler, null, $this->_delimiter, $this->_enclosure);
}

Das $_delimiterist eingestellt auf ,, das $_enclosureist eingestellt auf ".

Um zu versuchen, das Problem zu reproduzieren, kopiere ich den CSV-Auszug aus Ihrer Frage in eine Datei namens test.csv und führe den folgenden Code aus:

$f = fopen('test.csv', 'r');
$names = fgetcsv($f, null, ',', '"');    
$qty = count($names);
$uniqueQty = count(array_unique($names));
printf("%d records, %d unique records\n", $qty, $uniqueQty);

es erzeugt die folgende Ausgabe:

29 records, 29 unique records

Dies bedeutet, dass Ihre CSV-Datei grundsätzlich in Ordnung ist. Der Unterschied muss woanders sein.
In Bezug auf die Funktionsweise array_uniquegibt es einen Hinweis darauf, wie sich die Typbehandlung von Array-Elementen in PHP 5.2.9 geändert hat: http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -Änderungsprotokoll

Um das Problem zu reproduzieren, habe ich mein Testskript mit der festgelegten SORT_REGULAROption erneut ausgeführt, aber dies ergibt immer noch das gleiche Ergebnis (was logisch ist, da das Lesen einer Datei nur Zeichenfolgenwerte ergeben kann).

Derzeit glaube ich, dass der Unterschied in der von Ihnen verwendeten CSV-Datei liegen muss. Das Unix- und das Windows-Zeilenumbruchzeichen ( \nund \r\n) werden beide vom fgetcsv()Befehl erkannt , aber das alte Zeilenumbruchzeichen ( \r) im MacOS-Stil ( ) würde tatsächlich zu dem aufgetretenen Verhalten führen.

Ich kann nicht wissen, ob dies der Grund ist, warum das Problem auftritt, aber ich schlage vor, dass Sie die CSV-Datei (erneut) überprüfen. Es kann auch hilfreich sein, wenn Sie irgendwo einen Download-Link zur nicht geänderten Datei bereitstellen (kein Pastebin), damit nicht druckbare Zeichen erhalten bleiben.

Es kann auch hilfreich sein, wenn Sie die von Ihnen verwendete PHP-Version veröffentlichen.

Vinai
quelle
1
Das ist es! Ich habe webhex.net verwendet und es stellte sich heraus, dass die Datei 0D MaxOS-Zeilenumbrüche enthält. Ich habe es in \ r \ n geändert und jetzt funktioniert es. Vielen Dank!
PiTheNumber
2
Sie können auch versuchen, das auto_detect_line_endings: ini_set ("auto_detect_line_endings", "1") zu aktivieren.
Enrique
1

Ich habe diesen Fehler beim Bearbeiten und Speichern mit LibreOffice auf meinem Mac erhalten. Das Problem wurde behoben, indem die Datei stattdessen mit Google Drive bearbeitet wurde. Anschließend wurde der Fehler behoben.

Ich gehe davon aus, dass es an Mac-Zeilenenden liegt.

James Pelton
quelle
1

Wenn Sie die Codierung für neue Zeilen überprüft haben und weiterhin Probleme haben, überprüfen Sie noch einmal, ob Ihre CSV-Datei tatsächlich keinen doppelten Spaltennamen enthält. In Excel können Sie mit dieser Technik schnell Duplikate markieren:

  1. Wählen Sie den Zellenbereich aus, den Sie testen möchten (in diesem Fall alle Zellen in der Kopfzeile).
  2. Wählen Sie auf der Registerkarte "Startseite" von Excel die Option "Bedingte Formatierung", "Zellenregeln hervorheben" und dann "Werte duplizieren".
  3. Klicken Sie im Dialogfeld Doppelte Werte auf OK, um die doppelten Werte zu identifizieren.
  4. Doppelte Werte in der Liste werden jetzt identifiziert.

In meinem Fall hatte ich eine Formel (ungewollt) in die Kopfzeile gezogen und meinen Kopf durcheinander gebracht.

Code Commander
quelle
0

Sie können die CSV-Datei (mit einem Mac) auch als Windows-formatierte CSV-Datei speichern. Dadurch wird die Fehlermeldung für doppelte Spalten behoben. Ich arbeite auf einem Mac und so komme ich um diese Importfehler herum. Hoffe es funktioniert für dich.

Christopher Clarke
quelle