PHPExcel load xlsx 格式失败, xls 下正常

2017-09-25 21:44:55 +08:00
 Wilon

$filePath = '2520_1016722004.xlsx';
require_once('PHPExcel.php');
$PHPReader = new PHPExcel_Reader_Excel2007();
if( ! $PHPReader->canRead($filePath)){
      $PHPReader = new PHPExcel_Reader_Excel5();
      if( ! $PHPReader->canRead($filePath)){
         echo '';
          exit;
      }
}

$PHPExcel = new PHPExcel();
$PHPExcel = $PHPReader->load($filePath);

如代码所示,$filePath = '2520_1016722004.xlsx';是我为了测试这个问题,特地在该 PHP 文件的同目录下的一个文档,同时存在‘ 2520_1016722004.xlsx ’以及‘ 2520_1016722004.xls ’,这两个文档都是相同内容,使用 Microsoft Excel 2015 保存的两种格式,如果读取的是 xls 格式的文档,后面代码都能正确运行,但是读取 xlsx 格式的文档,均会卡在$PHPExcel = $PHPReader->load($filePath);处,请问如何解决?

3865 次点击
所在节点    PHP
13 条回复
GreatHumorist
2017-09-25 21:46:58 +08:00
PHPExcel 已经不支持了
建议使用[PHPSpreadsheet]( https://github.com/PHPOffice/PhpSpreadsheet)
如果还是不能读取的话把文件附上来,我帮你看看
Wilon
2017-09-25 21:56:56 +08:00
@GreatHumorist 不好意思,我今天可能是临时客串 PHP 的程序员,我现在的环境是 ThinkPHP3.2.3,请问可以用 PHPSpreadsheet 这个吗,因为我发现这个的版本支持只维护到最近六个月的 PHP
GreatHumorist
2017-09-25 22:13:37 +08:00
@Wilon 你发一个脱敏的测试文件看看呢,我看能不能用 phpexcel 解决
littleylv
2017-09-25 22:17:11 +08:00
我早放弃 PHPExcel 了,入了 box/spout 的坑,好用,谁用谁知道
Wilon
2017-09-25 22:22:18 +08:00
@littleylv 没办法,我今天临时客串 PHP 程序员,技术已经用着 PHPExcel 了
GreatHumorist
2017-09-25 22:26:23 +08:00
@littleylv PHPSpreadsheet 更好用,诚心推荐
Wilon
2017-09-25 22:28:09 +08:00
littleylv
2017-09-25 22:28:18 +08:00
@GreatHumorist #6 谢谢,后面看看
Wilon
2017-09-25 22:28:24 +08:00
@GreatHumorist 麻烦了,不好意思
GreatHumorist
2017-09-25 23:29:42 +08:00
@Wilon 亲测是没有问题的,我用 composer 安装的,然后测试代码如下
<?php

require './vendor/autoload.php';

$filePath = 'test.xlsx';
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
$excel = $reader->load($filePath);
echo $excel->getActiveSheet()->getCell('B2')->getValue();

正确返回 123

你正确下载下代码,检测下 zip 这些扩展开启没有,因为 xlsx 格式的文件实质是 zip 压缩包,里面是各种 xml 文件,phpexcel 读取的话会用 zip 扩展解压后获取里面的内容。
Wilon
2017-09-26 09:11:20 +08:00
@GreatHumorist 首先非常感谢,主要的扩展是哪些? require_once('PHPExcel.php');只引用这个不行吗?还是得像你一样 require './vendor/autoload.php'; ,这是把 PHPExcel 放在了 Vendor 里了吗?
GreatHumorist
2017-09-26 09:51:37 +08:00
@Wilon 看你怎么安装的,如果你只是直接下载的发行包的话可以不像我那样,因为我是用 composer 包管理安装的
这是官方的要求:
Requirements

PHP version 5.2.0 or higher
PHP extension php_zip enabled (required if you need PHPExcel to handle .xlsx .ods or .gnumeric files)
PHP extension php_xml enabled
PHP extension php_gd2 enabled (optional, but required for exact column width autocalculation)

直接用 PHPExcel.php 应该也是可以的
mingyun
2017-11-06 21:35:05 +08:00
@littleylv 谢谢推荐

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/393555

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX