Yii 使用PHPExcel导入Excel文件的方法,具体步骤如下:
一,PHPEXCEL 包下载页面:http://phpexcel.codeplex.com/
二,将压缩包中的 classes 目录复制到 protected/extensions 下并修改为 PHPExcel。
三,修改YII配置文件 config/main.php
...... 'import'=>array( ...... 'application.extensions.PHPExcel.PHPExcel', ...... ), ......
四,创建控制器
(以下为处理 PHPExcel autoload 和 YII autoload 相冲突的方法,任选其一,推荐第4种,最符合YII标准,也最方便)
4.1、修改PHPExcel中的Autoloader.php
PHPExcel_Autoloader::Register(); PHPExcel_Shared_ZipStreamWrapper::register();
修改为
Yii::registerAutoloader(array('PHPExcel_Autoloader','Register'),true);
4.2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件
...... public static function Register() { /* if (function_exists('__autoload')) { //Register any existing autoloader function with SPL,so we don't get any clashes spl_autoload_register('__autoload'); } //Register ourselves with SPL return spl_autoload_register(array('PHPExcel_Autoloader','Load')); */ $functions=spl_autoload_functions(); foreach($functions as $function) spl_autoload_unregister($function); $functions=array_merge(array(array('PHPExcel_Autoloader','Load')),$functions); foreach($functions as $function) $x=spl_autoload_register($function); return $x; } // function Register() ......
4.3、在需要使用PHPExcel时使用以下代码
$filePath='/home/public_html/sqt/protected/data/queueSql/company.xls'; spl_autoload_unregister(array('YiiBase','autoload')); $phpExcelPath=Yii::getPathOfAlias('application.extensions.PHPExcel.PHPExcel'); include($phpExcelPath.DIRECTORY_SEPARATOR.'IOFactory.php'); spl_autoload_register(array('YiiBase','autoload')); $PHPExcel=PHPExcel_IOFactory::load($filePath);
4.4、只要设置Yii::$enableIncludePath为false,第三方类库就有了执行自己的autoload方法的机会,并且不需要配置config/main.php,非常方便灵活
Yii::$enableIncludePath=false; Yii::import('application.extensions.PHPExcel.PHPExcel',1);
导入Excel文件方法
<?php $file=CUploadedFile::getInstanceByName('repair_attached_file');//获取上传的文件实例 if(in_array($file->getExtensionName(),array('xls','xlsx'))){ $excelFile=$file->getTempName();//获取文件名 //这里就是导入PHPExcel包了,要用的时候就加上如下这么两句 Yii::$enableIncludePath=false; Yii::import('application.extensions.PHPExcel.PHPExcel',1); $phpexcel=new PHPExcel; $excelReader=PHPExcel_IOFactory::createReader('Excel5'); $phpexcel=$excelReader->load($excelFile)->getSheet(0);//载入文件并获取第一个sheet Yii::$enableIncludePath=true;//及时的还原yii的自动加载模式 $total_line=$phpexcel->getHighestRow();//总行数 $total_column=$phpexcel->getHighestColumn();//总列数 if($total_line>1){ for($row=2;$row<=$total_line;$row++){ $data=array(); for($column='A';$column<=$total_column;$column++){ $data[]=trim($phpexcel->getCell($column.$row)->getValue()); } //一行行的插入数据库操作 $_model=clone $this->model; $_model->name=$data[0]; $_model->sex=$data[1]; $_model->add_time=time(); $_model->insert(); } } }