가져 오기 : 열 이름이 중복되었습니다


9

가져 오기에 "열 이름이 중복되었습니다"라는 오류 메시지가 표시되지만 중복이 없습니다.

누가이 문제를 해결할 수 있습니까?

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

파일 다운로드

내 모든 필드가 내 보낸 CSV에도 존재하는지 확인했습니다. 필요한 행이 누락 되었습니까? 확인하려고했지만 2012 년 이 위키 페이지 에는 내 보낸 파일에도없는 열이 필요합니다. 따라서 필요한 열이 무엇인지 잘 모르겠습니다.

PHP 버전은 5.2.17입니다


내보내기를 수행하고 동일한 열 세트가 있는지 비교하십시오.
user487772

글쎄, 나는하지 않지만 필요한 열이 있으므로 여기서 무엇을 놓치고 있습니까?
PiTheNumber 2016 년

어떤 유형의 가져 오기를 사용하고 있습니까?
user487772

/admin/import아닌 오래된 흐름.
PiTheNumber

그런 다음 예제의 대부분의 열에 잘못된 제목이 있습니다
user487772

답변:


13

지정한 오류 메시지가있는 예외는 정확히 한 곳에서 트리거됩니다 (가독성을 위해 코드가 약간 잘림).

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

이는 count(array_unique($this->_colNames))다음과 같지 않아야 함을 의미 합니다.$this->_colQuantity

$_colNames배열에 설정되어있는 Mage_ImportExport_Model_Import_Adapter_Csv::rewind()동안 호출되는 ( _init().
다시 한번, 코드가 약간 읽기 쉽도록 잘립니다 :

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

$_delimiter설정되어 ,는이 $_enclosure설정됩니다 ".

문제를 재현하기 위해 질문에서 CSV 추출을 test.csv 라는 파일로 복사 하고 다음 코드를 실행하면

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

다음과 같은 출력을 생성합니다.

29 records, 29 unique records

즉, CSV 파일은 기본적으로 괜찮습니다. 차이점은 다른 곳에 있어야합니다. 작동 방식을
살펴보면 array_uniquePHP 5.2.9에서 배열 요소의 유형 처리가 어떻게 변경되었는지에 대한 메모가 있습니다. http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -변경 로그

문제를 재현하기 위해 SORT_REGULAR옵션 세트로 테스트 스크립트를 다시 실행 하지만 여전히 동일한 결과를 얻습니다 (파일을 읽을 때만 문자열 값을 줄 수 있기 때문에 논리적입니다).

현재 차이점은 사용중인 CSV 파일에 있어야한다고 생각합니다. Unix 및 Windows 줄 바꿈 문자 ( \n\r\n)는 모두 fgetcsv()명령으로 인식 되지만 이전 MacOS 스타일 줄 바꿈 문자 ( \r)는 실제로 발생하는 동작으로 이어집니다.

이것이 문제가 발생하는 이유인지 알 수 없지만 CSV 파일을 다시 확인하는 것이 좋습니다. 수정되지 않은 파일 (pastebin 없음)에 다운로드 링크를 제공하면 인쇄 할 수없는 문자가 유지됩니다.

사용중인 PHP 버전을 게시하면 도움이 될 수도 있습니다.


1
그게 다야! webhex.net을 사용 했는데 파일에 0D MaxOS 줄 바꿈 \ r이 있습니다. \ r \ n으로 변경했는데 이제 작동합니다. 고마워요!
PiTheNumber 2016 년

2
auto_detect_line_endings : ini_set ( "auto_detect_line_endings", "1")을 활성화 할 수도 있습니다. PHP에서 권장합니다 : php.net/manual/en/function.fgetcsv.php
Enrique

1

Mac에서 LibreOffice를 사용하여 편집하고 저장할 때이 오류가 발생했습니다. 대신 Google 드라이브를 사용하여 파일을 편집하여 문제를 해결 한 후 오류가 사라졌습니다.

맥 라인 엔딩 때문이라고 가정합니다.


1

줄 바꿈 인코딩을 확인했지만 여전히 문제가있는 경우 실제로 CSV에 중복 된 열 이름이 없는지 다시 확인하십시오. Excel에서는이 기술을 사용하여 복제본을 빠르게 강조 표시 할 수 있습니다.

  1. 테스트하려는 셀 범위를 선택하십시오 (이 경우 머리글 행의 모든 ​​셀).
  2. Excel의 홈 탭에서 조건부 서식, 셀 규칙 강조 표시 및 값 복제를 선택합니다.
  3. 중복 값 대화 상자에서 확인을 클릭하여 중복 값을 식별하십시오.
  4. 이제 목록의 중복 값이 ​​식별됩니다.

필자의 경우 수식을 실수로 헤더 행으로 드래그하여 헤더를 엉망으로 만들었습니다.


0

Mac을 사용하여 .csv 파일을 Windows 형식의 .csv로 저장할 수도 있습니다. 중복 열 오류 메시지가 수정됩니다. 나는 Mac에서 작업하며 이것이 가져 오기 오류를 해결하는 방법입니다. 그것이 당신을 위해 작동하기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.