आयात: कॉलम नामों में डुप्लिकेट हैं


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"

फ़ाइल डाउनलोड करें

मैंने सुनिश्चित किया कि मेरे सभी क्षेत्र निर्यातित सीएसवी में भी मौजूद हैं। क्या मुझे कुछ आवश्यक पंक्तियाँ याद आ रही हैं? मैंने जांचने की कोशिश की, लेकिन 2012 के इस विकी पेज में उन कोलमन्स की आवश्यकता है जो कि निर्यात की गई फ़ाइल में भी नहीं हैं। इसलिए मुझे यकीन नहीं है कि आवश्यक कोलमन्स क्या हैं।

PHP संस्करण 5.2.17 है


एक निर्यात करें और तुलना करें कि आपके पास कॉलम का एक ही सेट है।
user487772

खैर, मेरे पास नहीं है, लेकिन मेरे पास आवश्यक कॉलम हैं इसलिए मैं यहां क्या याद कर रहा हूं?
PiNNumber

आप किस प्रकार के आयात का उपयोग कर रहे हैं?
user487772

/admin/import, नहीं पुराने dataflow।
PiNNumber

तब आपके अधिकांश उदाहरणों में गलत शीर्षक हैं
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_uniqueकाम करता है, इसको देखते हुए एक नोट है कि कैसे PHP 5.2.9 में सरणी तत्वों के प्रकार को बदलना: http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -changelog

समस्या को पुन: उत्पन्न करने के लिए, मैंने SORT_REGULARविकल्प सेट के साथ अपनी टेस्ट-स्क्रिप्ट को फिर से चलाया , लेकिन यह अभी भी वही परिणाम देता है (जो तर्कसंगत है, क्योंकि एक फ़ाइल को पढ़ने से केवल स्ट्रिंग मान दे सकते हैं)।

इस समय मेरा मानना ​​है कि आपके द्वारा उपयोग किए जा रहे CSV फ़ाइल में अंतर होना चाहिए। यूनिक्स और विंडोज न्यूलाइन वर्ण ( \nऔर \r\n) दोनों को fgetcsv()कमांड द्वारा मान्यता प्राप्त है , लेकिन पुराने मैकओएस स्टाइल न्यूलाइन कैरेक्टर ( \r) वास्तव में आपके द्वारा अनुभव किए जा रहे व्यवहार की ओर ले जाएंगे।

मुझे नहीं पता कि क्या यही कारण है कि आप इस मुद्दे का अनुभव कर रहे हैं, लेकिन मेरा सुझाव है कि आप CSV फ़ाइल (फिर से) की जाँच करें। यदि आप अनमॉडिफाइड फ़ाइल (कोई पास्टबिन) को डाउनलोड लिंक प्रदान करते हैं, तो यह भी मदद कर सकता है, इसलिए किसी भी गैर-मुद्रण योग्य वर्ण संरक्षित हैं।

यदि आप उपयोग किए जा रहे PHP संस्करण को पोस्ट करते हैं तो यह भी मदद कर सकता है।


1
बस! मैंने webhex.net का उपयोग किया और यह पता चला कि फ़ाइल में 0D MaxOS लाइन विराम \ r है। मैंने इसे \ r \ n में बदल दिया और अब यह काम करता है। आपका बहुत बहुत धन्यवाद!
पी.एन.नंबर

2
आप auto_detect_line_endings: ini_set ("auto_detect_line_endings", "1") को सक्षम करने का भी प्रयास कर सकते हैं, यह PHP द्वारा अनुशंसित है: php.net/manual/en/function.fgetcsv.php
Enrique

1

जब मैं अपने मैक पर लिब्रे ऑफिस का उपयोग कर संपादन और बचत कर रहा था तो मुझे यह त्रुटि मिली। इसके बजाय Google ड्राइव का उपयोग करके फ़ाइल को संपादित करके समस्या को हल किया गया था, फिर त्रुटि दूर हो गई।

मुझे लगता है कि यह मैक लाइन अंत के कारण है।


1

यदि आपने नई-लाइन एन्कोडिंग की जाँच की है और अभी भी समस्याएँ हैं, तो जाँच लें कि आपके CSV में डुप्लिकेट कॉलम नाम वास्तव में नहीं है। Excel में आप इस तकनीक के साथ डुप्लिकेट को तेज़ी से उजागर कर सकते हैं:

  1. उन कोशिकाओं की श्रेणी का चयन करें जिन्हें आप परीक्षण करना चाहते हैं (इस स्थिति में हेडर पंक्ति के सभी सेल)।
  2. एक्सेल के होम टैब पर, सशर्त स्वरूपण, हाइलाइट सेल नियम और फिर डुप्लिकेट मान चुनें।
  3. डुप्लिकेट मानों की पहचान करने के लिए डुप्लिकेट मान डायलॉग बॉक्स के भीतर ओके पर क्लिक करें।
  4. सूची में डुप्लिकेट मान अब पहचाने जाएंगे।

मेरे मामले में मैंने हेडर पंक्ति में एक सूत्र (अनजाने में) को घसीटा और मेरे हेडर को गड़बड़ कर दिया।


0

आप .csv फ़ाइल (मैक का उपयोग करके) को विंडोज फॉर्मेट के रूप में भी सहेज सकते हैं .csv यह डुप्लिकेट कॉलम त्रुटि संदेश को ठीक करेगा। मैं एक मैक पर काम करता हूं और इस तरह से मुझे इन आयात त्रुटियों के आसपास मिलता है। आशा है कि यह आप के लिए काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.