PHPExcel XLS 未被识别为 OLE 文件

标签 php excel phpexcel phpexcelreader

我使用 PHPExcel 库开发了一个 PHP Web 应用程序。除了某些 Excel 文档无法被识别为 Excel 文档之外,一切正常。当我使用 Microsoft Excel 打开这些文件并将它们另存为 xls、csv、xlsx 时,一切正常。 所以...我认为某些 Excel 文件与其扩展名并不完全一样。也许它们是伪装的 XML? PHPExcel 是否可以获得 XML 支持?

错误如下:

fatal error :在/home/www/text/excel/reader/Classes/PHPExcel/Shared/OLERead 中未捕获异常“PHPExcel_Reader_Exception”,并显示消息“文件名/tmp/phphrnIR2 未被识别为 OLE 文件” .php:89 堆栈跟踪: #0/home/test/excel/reader/Classes/PHPExcel/Reader/Excel5.php(1164): PHPExcel_Shared_OLERead->read('/tmp/phphrnIR2') #1/home/www/文本/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/phprnIR2') #3/home/www/test/excel/index.php(77): include_once('/home/www/test/ex...') #4 {main}在第 89 行/home/www/test/excel/reader/Classes/PHPExcel/Shared/OLERead.php 中抛出

以及文件识别的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 格式的文件时,很多人都会给它加上 xls 扩展名,甚至是 HTML 标记......永远不要相信该扩展名;由于 mime 类型将基于文件扩展名,因此您也不能仅从表面上理解它。

而不是根据扩展名/mime 类型专门创建一个阅读器......使用 PHPExcel IOFactory recognize() 方法来查看 PHPExcel 认为该文件是什么格式。或者调用 IOFactory 的 load() 方法,以便它可以尝试自行识别文件格式。

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

关于PHPExcel XLS 未被识别为 OLE 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604531/

相关文章:

Java 创建 csv 文件,有 "和 ; 在其中,在 Excel 中正确打开

excel - 自动列出带有前缀的一个月中的星期日

php - 使用 php excel 阅读器读取 xls 日期值

php - 使用 PHP 使用 mysql 数据库中的数据生成带有图表的 Excel 文件

php - Symfony2 Twig 覆盖默认路径函数

php - 尝试使用数据库中的用户登录时出现登录错误 [Yii2-Basic]

php - DIV 重叠图像而不是在 Chrome 中位于下方,在其他浏览器中看起来正确

php - PHP中判断表格每一行的CheckBox是否被选中

excel - 为什么 Excel 是 COM 对象时 ActiveWindow.SplitColumn 不起作用?

php - 在 Excel5.php 中找不到类 'PHPExcel'