PHPExcel 两种方式实现xls文件转数组的性能差异

·文件为5000行3列的xls文件。php版本为5.6

<?php

namespace app\common\logic;

use Exception;

class Xls{
    // 获取当前13位(毫秒级)时间戳
    private static function getMs(){
        list($msec, $sec) = explode(' ', microtime());
        $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectime;
    }
    // 实现xls/xlsx文件转数组
    public static function excel2data($path){
        $time = self::getMs();
        // 这种方式约耗时1270毫秒
        // include_once EXTEND_PATH . 'PHPExcel.php';
        // $fileType = explode('.', $path)[count(explode('.', $path)) - 1];
        // if ($fileType == 'xlsx') {
        //     $phpReader = new \PHPExcel_Reader_Excel2007();
        // } else if ($fileType == 'xls') {
        //     $phpReader = new \PHPExcel_Reader_Excel5();
        // }
        // if(!$phpReader->canRead($path)){
        //     throw Exception("文件路径错误");
        // }
        // $phpExcel = $phpReader->load($path);
        // $excelArray = $phpExcel->getActiveSheet()->toArray();   //转换为数组格式
        // array_shift($excelArray);  //删除第一个数组(标题);
       

       
        // 这种方式耗时约580毫秒
        include_once EXTEND_PATH . 'PHPExcel\IOFactory.php';
        $fileType = explode('.', $path)[count(explode('.', $path)) - 1];
        if ($fileType == 'xlsx') {
           $phpReader = "Excel2007";
        } else if ($fileType == 'xls') {
            $phpReader = "Excel5";
        }
        // 只读去数据,忽略里面各种格式等(对于Excel读去,有很大优化)
        $objReader = \PHPExcel_IOFactory::createReader($phpReader);
        $objReader->setReadDataOnly(true);
        if(!$objReader->canRead($path)){
            throw Exception("文件路径错误");
        }
        $phpExcel = $objReader->load($path);
        $excelArray = $phpExcel->getActiveSheet()->toArray();   //转换为数组格式
        array_shift($excelArray);  //删除第一个数组(标题);
        return self::getMs() - $time;
    }
}




posted @ 2020-11-12 11:12  cl94  阅读(192)  评论(0编辑  收藏  举报