Shijin TR
Shijin TR

Reputation: 7788

PHPExcel not working with xls file

I am using PHPExcel to read excel file in php,it is working fine with xlsx but when try to read xls file,It shows an error

     Fatal error: Call to undefined method PHPExcel_Reader_CSV::setReadDataOnly() in /var/www/....

Here is my code

            $file_path='/var/www/html/site/sample.xls';
            $inputFileType = PHPExcel_IOFactory::identify( $file_path);

            $objReader = PHPExcel_IOFactory::createReader($inputFileType);  

            $objReader->setReadDataOnly(true);

            /**  Load $inputFileName to a PHPExcel Object  **/  
            $objPHPExcel = $objReader->load( $file_path);

            $total_sheets=$objPHPExcel->getSheetCount(); 

            $allSheetName=$objPHPExcel->getSheetNames(); 
            $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); 
            $highestRow = $objWorksheet->getHighestRow(); 
            $highestColumn = $objWorksheet->getHighestColumn();  
            $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);  
            for ($row = 1; $row <= $highestRow;++$row) 
            {  
                for ($col = 0; $col <$highestColumnIndex;++$col)
                {  
                    $value=$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();  

                          $arraydata[$row-1][$col]=trim($value); 


                }  

            }

Upvotes: 1

Views: 2790

Answers (2)

Mark Baker
Mark Baker

Reputation: 212522

The file that you're loading is identified as a CSV file, even though it has an .xls extension... it is quite a common practise for some developers to save files formatted as csv or with html markup with a .xls extension, but that doesn't make them BIFF-format .xls files.

The setReadDataOnly() method isn't available for the CSV Reader, because a CSV file cannot contain anything other than data.

The most recent versions of PHPExcel provide a stub for setReadDataOnly() in the CSV Reader to prevent an error in this situation, and I'd certainly recommend that you upgrade to the latest code; but if you can't do that, then the simplest fix for you is simply to wrap the call to setReadDataOnly() in an if test:

$inputFileType = PHPExcel_IOFactory::identify( $file_path);

$objReader = PHPExcel_IOFactory::createReader($inputFileType);  
if ($inputFileType !== 'CSV') {
    $objReader->setReadDataOnly(true);
}

Upvotes: 2

Thomas Sahlin
Thomas Sahlin

Reputation: 796

For binary Excel files (xls) you may have better luck using the (old) PHP-ExcelReader. It's the most reliable one I've found so far.

Upvotes: 0

Related Questions