[英]PHPExcel XLS not recognised as an OLE file
我使用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();
好吧,尽管事实上它具有.xls
扩展名,但它很有可能不是BIFF格式的xls文件。
当文件是csv格式文件甚至HTML标记时,很多人都会给它一个xls扩展名。 而且由于mime类型将基于文件扩展名,因此您也不能一口气将其视为实物。
而不是根据扩展名/ MIME类型专门创建一个Reader。...使用PHPExcel IOFactory identity()方法查看PHPExcel认为该文件是哪种文件格式。 或调用IOFactory的load()方法,以便它可以尝试标识自身的文件格式。
显然,此文件不是BIFF格式的(或使用BIFF格式的早期版本创建的,在版本5之前),否则它将被识别为OLE文件
我遇到了您遇到的同一个匿名用户问题。 这是我解决的方法:
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.