【转】ThinkPHP与PHPExcel冲突

原文出自 http://www.lurenfake.com/archives/161/

最近一个项目需要批量导入Excel数据,要用到PHP读取Excel中的内容然后导入到数据库。很早之前就知道有一个叫做PHPExcel的类(官方网站)可以用来操作Excel,一直没有机会尝试,今天试用发现无比强大,下载后的源码包里有详细文档,几乎能实现手工操作Excel能实现的一切功能。

一个简单的读取Excel的例子如下:

$inputFileType = 'Excel2007';
$inputFileName = './public/files/import_user_template.xlsx';
$sheetname = 'Sheet1';
//指定Excel类型,创建一个reader
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
//设置只读取数据,不包括公式和格式
$objReader->setReadDataOnly(true);
//只读取指定的sheet
$objReader->setLoadSheetsOnly($sheetname);
$objPHPExcel = $objReader->load($inputFileName);

$curSheet = $objPHPExcel->getSheet(0);
//包含数据的最大列
$allColumn = $curSheet->getHighestColumn();
//包含数据的最大行
$allRow = $curSheet->getHighestRow();

for($currentRow = 1; $currentRow <= $allRow; $currentRow++){
        for($currentCol = 'A'; $currentCol <= $allColumn; $currentCol++){
                echo $curSheet->getCell($currentCol.$currentRow)->getValue()."\t";
        }
        echo "\r\n";
}


要在ThinkPHP中使用,把源码包中的Classes目录复制到ThinkPHP的Vendor目录下,改名为PHPExcel,然后调用Vendor方法载入

vendor('PHPExcel.PHPExcel');可是这样一来发现读取Excel以后再调用M或者D方法实例化模型类时报找不到Model类的错误,经过研究发现是自动装载机制冲突,要解决冲突,需要在M或者D方法调用之前使用spl_autoload_register函数重新注册autoloader类

spl_autoload_register(array('Think','autoload'));

你可能感兴趣的:(PHP,Excel)