2013-04-09 17 views
6

इस कोड को मैं एक ही उत्कृष्टता फ़ाइल .xls में बचाया है है, PHPExcelgetHighestColumn काम नहीं कर रहा

public function getHighestColumn() 
    { 
     return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); 
    } 

    public function getHighestRow() 
    { 
     return $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); 
    } 

का उपयोग करने और .xlsx यह 10 कॉलम (बी से K करने के लिए), और 10 पंक्तियों

है

जब मैं getHighestColumn का उपयोग करता हूं, तो .xls में मुझे 'के' (सही) मिल रहा है, लेकिन .xlsx में मुझे एएमके (सभी एक्सेल वर्कशीट में अंतिम कॉलम) मिल रहा है पंक्ति के बारे में, .xls I ' मुझे 10 मिल रहा है, लेकिन .xlsx में मुझे 1024 मिल रहा है। मुझे पूरा यकीन है कि, तालिका को छोड़कर, बाकी वर्कशीट खाली है।

कोई विचार क्यों मुझे अलग परिणाम मिल रहा है?

यहाँ पाठकों मैं

public function openReader($filePath) 
    { 
     //aca determinamos cual tipo es para saber que reader es 
    $reader_5 = new PHPExcel_Reader_Excel5(); 
    $reader_07 = new PHPExcel_Reader_Excel2007(); 

    $inputFileType = $this->canRead(new PHPExcel_Reader_Excel5(), $filePath, self::EXCEL5); 

    if($inputFileType === '') 
     $inputFileType = $this->canRead(new PHPExcel_Reader_Excel2007(), $filePath, self::EXCEL2007); 
    else 
    { 
     throw new Exception("No se puede procesar el archivo; el formato no es correcto"); 
    } 
    return PHPExcel_IOFactory::createReader($inputFileType); 
    } 


private function canRead($reader, $path, $readerType) 
    { 
    return $reader->canRead($path) ? $readerType: ''; 
    } 

public function persist($fileName) 
    { 
     $filePath = sfConfig::get('sf_upload_dir').'\\'.$fileName; 

     $this->objReader = $this->openReader($filePath); 
     //Set only first Sheet 
     $this->setOnlyFirstSheet(); 

     $this->createObjPHPExcel($filePath); 

     echo $this->getHighestColumn(); 
     echo $this->getHighestRow(); 
    } 

मैं प्रत्येक मामले में मैं सही रीडर का उपयोग कर रहा हूँ var_dump साथ की जाँच की और किया है का उपयोग कर रहा है।

php 5.3.5, PHPExcel 1.7.8, Symfony 1.4

+1

आप हो रही नहीं किया जाना चाहिए xls फ़ाइल में सबसे अधिक स्तंभ के लिए 'बी' आप स्तंभ में डेटा हो, तो 'के' .... लेकिन एमएस एक्सेल में xlsx फ़ाइल खोलें और यह देखने के लिए Ctrl-End करें कि यह अंतिम सेल –

+2

क्या सोचता है, क्योंकि पंक्तियों और स्तंभों को GetHighestColumn() द्वारा प्राप्त किया जाता है और getHighestRow() प्राप्त करते हैं यदि उनमें _anything_ है (शैली की जानकारी सहित) सामग्री को रखने के बजाय, getHighestDataColumn() को प्राप्त करें और getHighestDataRow() विधियां –

+0

मेरा मतलब है, 'के' प्राप्त करना, एक टाइपो था। यह जांचना कि –

उत्तर

16

पंक्तियों और स्तंभों के बजाय बस होने सामग्री की तुलना में getHighestColumn() और getHighestRow() से की जाती है, तो वे कुछ भी (शैली जानकारी सहित) होते हैं। स्प्रेडशीट लोड होने पर इन मानों की भी गणना की जाती है, इसलिए यदि आप बाद में वर्कशीट में नई पंक्तियां या कॉलम जोड़ते हैं तो सटीक नहीं हो सकता है।

इसके बजाय, getHighestDataColumn() और getHighestDataRow() विधियों का उपयोग उच्चतम पंक्ति और कॉलम को वापस करने के लिए करें जिसमें वास्तव में कोशिकाओं में डेटा मान होते हैं। जबकि कम कुशल, वे वास्तव में उच्चतम कक्ष संदर्भ जब कहा जाता है जो धीमी है, गणना, लेकिन हमेशा सही

1
$highestColumn = $sheet->getHighestColumn();  
$colNumber = PHPExcel_Cell::columnIndexFromString($highestColumn); 
+1

के रूप में देख सकता हूं, प्रदान किया गया कोड मदद कर सकता है, लेकिन इसे एक अच्छा उत्तर देने के लिए आपको यह भी वर्णन करना चाहिए कि आपके कोड में समस्या का समाधान क्यों/वास्तव में है। – ZygD

+0

पहले से ही मैं इस परियोजना का उपयोग किसी एक परियोजना में कर रहा हूं – gopi

संबंधित मुद्दे