V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wilon
V2EX  ›  PHP

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

  •  
  •   Wilon · 2017-09-25 21:44:55 +08:00 · 3993 次点击
    这是一个创建于 2650 天前的主题,其中的信息可能已经有所发展或是发生改变。

    $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);处,请问如何解决?

    13 条回复    2017-11-06 21:35:05 +08:00
    GreatHumorist
        1
    GreatHumorist  
       2017-09-25 21:46:58 +08:00   ❤️ 2
    PHPExcel 已经不支持了
    建议使用[PHPSpreadsheet]( https://github.com/PHPOffice/PhpSpreadsheet)
    如果还是不能读取的话把文件附上来,我帮你看看
    Wilon
        2
    Wilon  
    OP
       2017-09-25 21:56:56 +08:00
    @GreatHumorist 不好意思,我今天可能是临时客串 PHP 的程序员,我现在的环境是 ThinkPHP3.2.3,请问可以用 PHPSpreadsheet 这个吗,因为我发现这个的版本支持只维护到最近六个月的 PHP
    GreatHumorist
        3
    GreatHumorist  
       2017-09-25 22:13:37 +08:00
    @Wilon 你发一个脱敏的测试文件看看呢,我看能不能用 phpexcel 解决
    littleylv
        4
    littleylv  
       2017-09-25 22:17:11 +08:00
    我早放弃 PHPExcel 了,入了 box/spout 的坑,好用,谁用谁知道
    Wilon
        5
    Wilon  
    OP
       2017-09-25 22:22:18 +08:00
    @littleylv 没办法,我今天临时客串 PHP 程序员,技术已经用着 PHPExcel 了
    GreatHumorist
        6
    GreatHumorist  
       2017-09-25 22:26:23 +08:00
    @littleylv PHPSpreadsheet 更好用,诚心推荐
    Wilon
        7
    Wilon  
    OP
       2017-09-25 22:28:09 +08:00
    littleylv
        8
    littleylv  
       2017-09-25 22:28:18 +08:00
    @GreatHumorist #6 谢谢,后面看看
    Wilon
        9
    Wilon  
    OP
       2017-09-25 22:28:24 +08:00
    @GreatHumorist 麻烦了,不好意思
    GreatHumorist
        10
    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
        11
    Wilon  
    OP
       2017-09-26 09:11:20 +08:00
    @GreatHumorist 首先非常感谢,主要的扩展是哪些? require_once('PHPExcel.php');只引用这个不行吗?还是得像你一样 require './vendor/autoload.php'; ,这是把 PHPExcel 放在了 Vendor 里了吗?
    GreatHumorist
        12
    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
        13
    mingyun  
       2017-11-06 21:35:05 +08:00
    @littleylv 谢谢推荐
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2816 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:39 · PVG 10:39 · LAX 18:39 · JFK 21:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.