İçe Aktar: Sütun adlarında kopyalar var


9

İçe aktarma "Sütun adlarının kopyaları var" hata iletisini gösteriyor ancak çoğaltmam yok.

Bunu kim düzeltebilirim?

"_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"

Dosyayı indir

Tüm alanlarımın dışa aktarılan CSV'de de bulunduğundan emin oldum. Gerekli bazı satırları kaçırıyor muyum? Kontrol etmeye çalıştım ama 2012'deki bu wiki sayfası , dışa aktarılan dosyada bile olmayan sütunlar gerektiriyor. Bu yüzden gerekli sütunların ne olduğundan emin değilim.

PHP Sürümü 5.2.17


Dışa aktarma yapın ve aynı sütun kümesine sahip olduğunuzu karşılaştırın.
user487772

Peki, yok ama gerekli sütunlara sahibim, bu yüzden burada ne eksik?
PiTheNumber

Ne tür bir ithalat kullanıyorsunuz?
user487772

/admin/importDeğil eski veri akışı.
PiTheNumber

Ardından, örneğinizdeki sütunların çoğunda yanlış başlıklar var
user487772

Yanıtlar:


13

Belirttiğiniz hata mesajının istisnası tam olarak bir yerde tetiklenir (kod okunabilirlik için biraz kesilir):

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'));
        }
    }
}

Bu araçlar, count(array_unique($this->_colNames))eşit olmayan olmalıdır$this->_colQuantity

$_colNamesDizi ayarlanır Mage_ImportExport_Model_Import_Adapter_Csv::rewind()sırasında denir ( _init().
Bir kez daha, kod biraz okunabilirlik için konur:

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);
}

$_delimiterAyarlandığında ,, $_enclosureayarlandığında ".

Sorunu yeniden oluşturmayı denemek için, sorunuzdan CSV ayıklamasını test.csv adlı bir dosyaya kopyalar ve aşağıdaki kodu çalıştırırsam:

$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);

aşağıdaki çıktıyı üretir:

29 records, 29 unique records

Bu, CSV dosyanızın temelde uygun olduğu anlamına gelir. Aradaki fark başka bir yerde olmalı.
Nasıl array_uniqueçalıştığına bakıldığında, PHP 5.2.9'da dizi öğelerinin tür işlemesinin nasıl değiştiğine dair bir not vardır: http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -changelog

Sorunu yeniden oluşturmak için, test komut dosyamı SORT_REGULARseçenek kümesi ile yeniden çalıştırdım , ancak bu yine de aynı sonucu veriyor (bu mantıklı, çünkü bir dosyayı okumak yalnızca dize değerleri verebilir).

Şu anda farkın kullandığınız CSV dosyasında olması gerektiğine inanıyorum. Unix ve Windows yeni satır karakterlerinin ( \nve \r\n) ikisi de fgetcsv()komut tarafından tanınır , ancak eski MacOS stili yeni satır karakteri ( \r) aslında yaşadığınız davranışa yol açar.

Sorunu yaşamanızın sebebinin bu olup olmadığını bilmiyorum, ancak CSV dosyasını kontrol etmenizi öneririm (tekrar). Değiştirilmemiş dosyaya bir indirme bağlantısı sağlarsanız (macun yok), yazdırılamayan karakterler korunur.

Kullandığınız PHP sürümünü yüklerseniz de yardımcı olabilir.


1
Bu kadar! Webhex.net kullandım ve dosya 0D MaxOS satır sonları olduğu ortaya çıktı \ r. Bunu \ r \ n olarak değiştirdim ve şimdi çalışıyor. Çok teşekkürler!
PiTheNumber

2
Ayrıca auto_detect_line_endings: ini_set'i ("auto_detect_line_endings", "1") etkinleştirmeyi de deneyebilirsiniz, PHP tarafından tavsiye edilir: php.net/manual/en/function.fgetcsv.php
Enrique

1

Mac'imde LibreOffice kullanarak düzenleme ve kaydetme sırasında bu hatayı alıyordum. Sorun, bunun yerine Google Drive kullanılarak dosya düzenlenerek çözüldü, ardından hata ortadan kalktı.

Sanırım Mac çizgi sonlarından kaynaklanıyor.


1

Yeni satır kodlamasını kontrol ettiyseniz ve hâlâ sorun yaşıyorsanız, CSV'nizde gerçekten yinelenen sütun adının bulunmadığını iki kez kontrol edin. Excel'de kopyaları bu teknikle hızlı bir şekilde vurgulayabilirsiniz:

  1. Test etmek istediğiniz hücre aralığını seçin (bu durumda başlık satırındaki tüm hücreler).
  2. Excel'in Giriş sekmesinde Koşullu Biçimlendirme, Hücre Kurallarını Vurgula ve ardından Yinelenen Değerler'i seçin.
  3. Yinelenen değerleri belirlemek için Yinelenen Değerler iletişim kutusunda Tamam'ı tıklatın.
  4. Şimdi listedeki yinelenen değerler tanımlanacak.

Benim durumumda bir formülü (istemeden) başlık satırına sürükledim ve başlığımı dağıttım.


0

Ayrıca .csv dosyasını (Mac kullanarak) Windows Biçimlendirilmiş .csv olarak kaydedebilirsiniz. Bu, yinelenen sütunlar hata iletisini düzeltir. Bir Mac üzerinde çalışıyorum ve bu ithalat hataları bu şekilde olsun. Umarım sizin için çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.