重构PHP通用查询系统之1----PHPExcel类在框架中如何调用?
2020-01-26 admin php 1450
原生PHP通用查询系统,可以直接require_once调用,代码如下:
//调用phpexcel require_once 'PHPExcel.php'; require_once 'PHPExcel/IOFactory.php'; require_once 'PHPExcel/Reader/Excel5.php'; //实例化Excel读取类,并根据xls和xlsx选择不同读取类 $objReader = new PHPExcel_Reader_Excel2007(); if(!$objReader->canRead($files)){ $objReader = new PHPExcel_Reader_Excel5(); if(!$objReader->canRead($files)){ echo ' 警告:无法识别的Excel文件!'; return false; }
然而,在框架中,无论是自动加载类方式,还是手动require_once,在new时都提示无法找到类。经查看,PHPExcel这个项目比较老了,不支持命名空间,而框架是使用命名空间的。如何解决呢?
经反复测试,可以在框架contorller中,先直接引入类。PHPExcel就放在contorller目录中,文件目录如下:
在控制器中,可以和原生的PH一样引入:
//调用phpexcel require_once 'PHPExcel.php'; require_once 'PHPExcel/IOFactory.php';
这时,new依然报错找不到类。关键在于new的方法,应该这样:
//实例化Excel读取类,并根据xls和xlsx选择不同读取类 $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); if(!$objReader->canRead($files)){ $objReader = \PHPExcel_IOFactory::createReader('Excel5'); if(!$objReader->canRead($files)){ //无法识别的Excel文件 return false; } }
使用\PHPExcel_IOFactory::的方式才能正常调用。其它的类似,比如获取总列数,应该这样:
$zls = \PHPExcel_Cell::columnIndexFromString($zlszm);
通过这种方法,可以解决PHPExcel不支持命名空间的问题,使用完全正常。