2013-04-09 7 views
6

arbeiten, haben diesen Code, mit PHPExcelgetHighestColumn in xlsx nicht

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

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

Ich habe die gleiche Datei in .xls gespeichert Excel und .xlsx Es verfügt über 10 Spalten (Von B bis K) und 10 Reihen

Wenn ich getHighestColumn verwenden, in .xls bekomme ich 'K' (richtig), aber in .xlsx Ich bekomme AMK (die letzte Spalte in allen Excel Arbeitsblatt) Über die Zeile, mit .xls I ' Ich bekomme 10, aber in .xlsx bekomme ich 1024. Ich bin ziemlich sicher, dass, außer der Tabelle, der Rest des Arbeitsblatts leer ist.

Irgendwelche Ideen, warum ich ein anderes Ergebnis bekomme?

Hier sind die Leser Ich bin mit

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

Ich habe mit var_dump geprüft und in jedem Fall, den ich bin mit dem richtigen Leser.

PHP 5.3.5, 1.7.8 PHPExcel, Symfony 1.4

+1

Sie sollten ‚B‘ für die höchste Spalte in der xls-Datei nicht bekommen, wenn Sie Daten in Spalte 'K' .... aber öffne die xlsx-Datei in MS EXcel und führe Strg-Ende, um zu sehen, wie die letzte Zelle aussieht. –

+2

Auch, weil rows und columns von getHighestColumn() und getHighestRow() gezählt werden, wenn sie _anything_ enthalten (einschließlich style-Informationen), anstatt einfach mit Inhalt, sehen Sie sich die getHighestDataColumn() und getHighestDataRow() -Methoden –

+0

Ich meine, bekommen "K", war ein Tippfehler. Überprüfen Sie diese Methoden –

Antwort

16

Zeilen und Spalten werden gezählt durch getHighestColumn() und getHighestRow() wenn sie etwas (einschließlich Stilinformationen) enthalten, anstatt einfach mit Inhalt. Diese Werte werden auch berechnet, wenn das Arbeitsblatt geladen wird. Dies ist möglicherweise nicht korrekt, wenn Sie dem Arbeitsblatt anschließend neue Zeilen oder Spalten hinzufügen. Verwenden Sie stattdessen die Methoden getHighestDataColumn() und getHighestDataRow(), um die höchste Zeile und Spalte zurückzugeben, die tatsächlich Datenwerte in Zellen enthalten. Während weniger effizient berechnen sie tatsächlich den höchsten Zellbezug, wenn du aufgerufen, die langsamer ist, aber immer genau

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

Bereitgestellter Code könnte helfen, aber um eine gute Antwort zu geben, sollten Sie auch beschreiben/erklären, warum/wie genau Ihr Code das Problem löst. – ZygD

+0

Bereits verwende ich diesen Code in einem der Projekte – gopi