PHPExcel XLS不被识别为OLE文件

我使用PHPExcel库开发了一个PHP Web应用程序。 除了一些Excel文档奇怪地不能被识别为Excel文档,所有工作都正常。 当我用Microsoft Excel打开这些文件并将它们保存为xls,csv,xlsx时,那么一切正常。 所以…我认为一些Excel文件并不完全是他们的扩展所说的。 也许他们是伪装的XML? PHPExcel可以获得XML支持吗?

这是错误:

Fatal error: Uncaught exception 'PHPExcel_Reader_Exception' with message 'The filename /tmp/phphrnIR2 is not recognised as an OLE file' in /home/www/text/excel/reader/Classes/PHPExcel/Shared/OLERead.php:89 Stack trace: #0 /home/test/excel/reader/Classes/PHPExcel/Reader/Excel5.php(1164): PHPExcel_Shared_OLERead->read('/tmp/phphrnIR2') #1 /home/www/text/excel/reader/Classes/PHPExcel/Reader/Excel5.php(612): PHPExcel_Reader_Excel5->_loadOLE('/tmp/phphrnIR2') #2 /home/www/test/excel/actions.php(60): PHPExcel_Reader_Excel5->load('/tmp/phphrnIR2') #3 /home/www/test/excel/index.php(77): include_once('/home/www/test/ex...') #4 {main} thrown in /home/www/test/excel/reader/Classes/PHPExcel/Shared/OLERead.php on line 89

和文件识别的PHP代码:

  $name = $_FILES['file']['name']; $tname = $_FILES['file']['tmp_name']; $type = $_FILES['file']['type']; if($type == 'application/vnd.ms-excel') { // Excel 97 extension $ext = 'xls'; } else if($type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') { // Excel 2007 and 2010 extension $ext = 'xlsx'; } else if($type == 'text/csv') { // Excel CSV extension $ext = 'csv'; }else{ // Invalid Extension ?> <script languaje="javascript"> swal("Bad file...", "A valid extension must be XLS, XLSX o CSV!", "error"); </script> <?php exit(); } //reader creation $objReader = PHPExcel_IOFactory::createReader($$ext); //uploading file $objPHPExcel = $objReader->load($tname); $dim = $objPHPExcel->getActiveSheet()->calculateWorksheetDimension(); 

那么,尽pipe它有一个.xls扩展名,但它完全可能不是BIFF格式的xls文件。

很多人给一个文件xls扩展名时,它是一个csv格式的文件,甚至是HTML标记…..永远不要相信扩展名; 而且由于MIMEtypes将基于文件扩展名,所以你也不能将其作为面值。

使用PHPExcel IOFactory identify()方法来查看PHPExcel相信该文件是什么文件格式,而不是专门创build基于扩展名/ MIMEtypes的Reader。 或者调用IOFactory的load()方法,以便它可以尝试识别自己的文件格式。

显然,这个文件不是BIFF格式的(或者是在版本5之前使用BIFF格式的早期版本创build的),否则将被识别为OLE文件

我遇到了与匿名用户相同的问题。 这是我如何解决它:

让PHPExcel发现types

快速简单地加载

 require_once('Classes'.DIRECTORY_SEPARATOR.'PHPExcel.php'); // Tell PHPExcel to load this file and make its best guess as to its type. $objPHPExcel = PHPExcel_IOFactory::load($_FILES['uploaded_file']['tmp_name']); 

加载选项

 require_once('Classes'.DIRECTORY_SEPARATOR.'PHPExcel.php'); // Tell PHPExcel that you will be loading a file. $objReader = PHPExcel_IOFactory::createReaderForFile($_FILES['uploaded_file']['tmp_name']); // Set your options. $objReader->setReadDataOnly(true); // Tell PHPExcel to load this file and make its best guess as to its type. $objPHPExcel = $objReader->load($_FILES['uploaded_file']['tmp_name']); 

资源

现在你已经有了一个PHPExcel对象,你可以这样工作:

  foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $worksheets[] = $worksheet->toArray(); } foreach($worksheets as $sheet) { foreach($sheet as $row) { print_r($row); } }