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;
}
}