2013-04-09 6 views
6

を動作していないが、私は同じそれは(BからKまで)10列、10行を持って.XLSで保存したファイルとの.xlsx を得意としていPHPExcelgetHighestColumnはXLSXで

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

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

を使用して、このコードを持っている

.xlsで「K」(正しい)が表示されますが、.xlsxではAMK(すべてのExcelワークシートの最後の列)が表示されます .xlsを使用して、私は10を得ていますが、xlsxでは1024を取得しています。 テーブルを除いて、残りのワークシートは空白です。

なぜ私は別の結果を得ていますか?ここで

は、私がvar_dumpでチェックしましたし、それぞれの場合に、私は右のリーダーを使用してい

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

を使用している読者がいます。

PHP 5.3.5、彼らはむしろ、単にコンテンツを持つよりも、(スタイル情報を含む)は何が含まれている場合、PHPExcel 1.7.8は、symfonyの1.4

+1

あなたは列のデータを持っている場合は、XLSファイルで最高の列に「B」を取得してはなりません'K' ....しかし、MS Excelでxlsxファイルを開き、最後のセルが –

+2

だと思っているかどうかを見るにはCtrl-Endを押します。また、行と列はgetHighestColumn()とgetHighestRow()によってカウントされるので、単にコンテンツを持つのではなく、スタイル情報も含めて、getHighestDataColumn()メソッドとgetHighestDataRow()メソッドを見てください。 –

+0

私は、「K」を得ることが誤植であることを意味しています。その方法を確認する –

答えて

16

行と列をgetHighestColumn()getHighestRow()によってカウントされています。これらの値は、スプレッドシートがロードされたときにも計算されるため、後でワークシートに新しい行または列を追加すると正確ではない場合があります。

代わりに、getHighestDataColumn()およびgetHighestDataRow()メソッドを使用して、実際にデータ値を含む行のうち最も高い行をセルに戻します。あまり効率的であるが、それらは実際には遅いと呼ばれる最高のセル参照を、計算するが、常に正確な

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

提供されたコードが役立つかもしれませんが、良い答えを出すために、なぜ/どのようにしてコードが問題を解決するのか説明/説明する必要があります。 – ZygD

+0

すでにこのコードをプロジェクトの1つで使用しています – gopi