Nhập: Tên cột có trùng lặp


9

Nhập hiển thị thông báo lỗi "Tên cột có trùng lặp" nhưng tôi không có bất kỳ bản sao nào.

Tôi có thể sửa cái này?

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

Tải tập tin

Tôi chắc chắn rằng tất cả các lĩnh vực của tôi cũng tồn tại trong csv xuất khẩu. Tôi có thiếu một số hàng bắt buộc không? Tôi đã cố kiểm tra nhưng trang wiki này từ năm 2012 yêu cầu columens thậm chí không có trong tệp xuất. Vì vậy, tôi không chắc chắn các columens cần thiết là gì.

Phiên bản PHP là 5.2.17


Thực hiện xuất và so sánh rằng bạn có cùng một bộ cột.
dùng487772

Chà, tôi thì không nhưng tôi có những cột cần thiết vậy tôi còn thiếu gì ở đây?
PiTheNumber

Bạn đang sử dụng loại nhập khẩu nào?
dùng487772

Các /admin/import, không phải là dataflow cũ.
PiTheNumber

Sau đó, hầu hết các cột trong ví dụ của bạn có tiêu đề sai
user487772

Câu trả lời:


13

Ngoại lệ với thông báo lỗi bạn đã nêu được kích hoạt ở chính xác một nơi (mã bị cắt ngắn để dễ đọc):

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

Điều này có nghĩa, count(array_unique($this->_colNames))phải không bằng$this->_colQuantity

Các $_colNamesmảng được đặt trong Mage_ImportExport_Model_Import_Adapter_Csv::rewind()(được gọi là trong suốt _init().
Một lần nữa, các mã được hơi cắt ngắn để có thể đọc:

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

Cái $_delimiterđược đặt thành ,, cái $_enclosuređược đặt thành ".

Để thử tái tạo vấn đề, nếu tôi sao chép trích xuất CSV từ câu hỏi của bạn vào một tệp có tên test.csv và chạy mã sau đây:

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

nó tạo ra đầu ra sau:

29 records, 29 unique records

Điều này có nghĩa, về cơ bản, tệp CSV của bạn ổn. Sự khác biệt phải ở một nơi khác.
Nhìn vào cách thức array_uniquehoạt động, có một lưu ý về cách xử lý kiểu của các phần tử mảng đã thay đổi trong PHP 5.2.9: http://php.net/manual/en/feft.array-unique.php#refsect1-feft.array-unique -chuyển đổi

Để tái tạo vấn đề, tôi chạy lại tập lệnh thử nghiệm của mình với tập SORT_REGULARtùy chọn, nhưng điều này vẫn cho kết quả tương tự (điều này hợp lý, vì đọc một tệp chỉ có thể đưa ra các giá trị chuỗi).

Tại thời điểm này, tôi tin rằng sự khác biệt phải có trong tệp CSV bạn đang sử dụng. Các ký tự dòng mới Unix và Windows ( \n\r\n) đều được fgetcsv()lệnh nhận ra , nhưng ký tự dòng mới kiểu MacOS ( \r) thực sự sẽ dẫn đến hành vi bạn đang gặp phải.

Tôi không thể biết đó có phải là lý do tại sao bạn gặp phải sự cố không, nhưng tôi khuyên bạn nên kiểm tra tệp CSV (một lần nữa). Nó cũng có thể hữu ích nếu bạn cung cấp một liên kết tải xuống ở đâu đó vào tệp chưa sửa đổi (không có pastebin), vì vậy mọi ký tự không in được đều được giữ nguyên.

Nó cũng có thể hữu ích nếu bạn đăng phiên bản PHP bạn đang sử dụng.


1
Đó là nó! Tôi đã sử dụng webhex.net và hóa ra tệp có ngắt dòng MaxOS 0D \ r. Tôi đã thay đổi nó thành \ r \ n và bây giờ nó hoạt động. Cảm ơn rất nhiều!
PiTheNumber

2
Bạn cũng có thể thử bật auto_detect_line_endings: ini_set ("auto_detect_line_endings", "1"), nó được khuyến nghị bởi PHP: php.net/manual/en/feft.fgetcsv.php
Enrique

1

Tôi đã nhận được lỗi này khi chỉnh sửa và lưu bằng LibreOffice trên máy Mac của mình. Vấn đề đã được giải quyết bằng cách chỉnh sửa tệp bằng Google Drive, sau đó lỗi đã biến mất.

Tôi cho rằng đó là do kết thúc dòng Mac.


1

Nếu bạn đã kiểm tra mã hóa dòng mới và vẫn gặp sự cố, hãy kiểm tra kỹ xem bạn có thực sự có tên cột trùng lặp trong CSV không. Trong Excel, bạn có thể nhanh chóng làm nổi bật các bản sao bằng kỹ thuật này:

  1. Chọn phạm vi ô bạn muốn kiểm tra (trong trường hợp này là tất cả các ô trong hàng tiêu đề).
  2. Trên tab Trang chủ của Excel, chọn Định dạng có điều kiện, Đánh dấu các quy tắc ô và sau đó sao chép các giá trị.
  3. Bấm OK trong hộp thoại trùng lặp giá trị để xác định các giá trị trùng lặp.
  4. Các giá trị trùng lặp trong danh sách sẽ được xác định.

Trong trường hợp của tôi, tôi đã kéo một công thức (vô tình) vào hàng tiêu đề và làm hỏng tiêu đề của tôi.


0

Bạn cũng có thể lưu tệp .csv (sử dụng máy Mac) dưới dạng .csv được định dạng của Windows. Điều này sẽ sửa các thông báo lỗi cột trùng lặp. Tôi làm việc trên máy Mac và đây là cách tôi khắc phục các lỗi nhập này. Hi vọng nó sẽ giúp ích cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.