YII中整合PHPEXCEL进行数据导入MYSQL数据库

来源:互联网 发布:java宿舍管理系统 编辑:程序博客网 时间:2024/04/28 00:14

     上一篇写到了数据导出EXCEL,同样的有时候需要进行EXCEL数据导入数据库,此处同样适用的是PHPEXCEL包,具体的方法如下:

/** * @todo import excel to mysql * @param $filepath 存储路径 * @param $file 原始的文件名 * @param $filetemp 文件临时存储路径 * @param $sqls insert语句部分  * @return boolean false/true * @see 例子: *  if (isset($_POST['submit'])){$files=$_FILES['excelfile'];$file=$files['name'];$filetemp=$files['tmp_name'];$filepath='upload/';$sql='INSERT INTO user (`userid`, `username`, `userage`) VALUES (';$importExcel = $this-> importExcel($filepath, $file, $filetemp, $sql);if ($importExcel==TRUE){echo 'true';}else{echo 'false';}} */public function importExcel($filepath,$file,$filetemp,$sqls){//PHPEXCEL包路径$phpExcelPath=Yii::app() -> request -> baseUrl.'/protected/extensions/phpexcel/';spl_autoload_unregister(array('YiiBase','autoload'));//取消YII自动加载include($phpExcelPath  . 'PHPExcel.php');//引入PHPEXCEL类//实现文件上传$filename=explode('.', $file);$time=time();$filename[0]=time();$filename=implode('.', $filename);$uploadfile=$filepath.$filename;$uploadResult=move_uploaded_file($filetemp, $uploadfile);//根据文件上传状态进行具体操作error_reporting(E_ALL ^ E_NOTICE); if ($uploadResult==TRUE){//初始化EXCEL导入$excelReader = PHPExcel_IOFactory::createReader('Excel5');$objPHPExcel = $excelReader -> load($uploadfile);//获取需要导入文件$objWorksheet = $objPHPExcel -> getActiveSheet();$highestRow = $objWorksheet -> getHighestRow(); //计算行数$highestColumn = $objWorksheet->getHighestColumn();//计算列数$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//初始化列数索引总数//读取EXCEL数据文件for ($row = 2; $row <= $highestRow; $row++){//获取一行中每列的数据for ($col = 0 ; $col <$highestColumnIndex; $col++ ){$list[$col] = "'". $objWorksheet -> getCellByColumnAndRow($col, $row) -> getValue() ."'";}$sqlStr = join(',', $list);$sqlAll[]= $sqls.$sqlStr.');';}//执行SQL操作include 'BaseModel.php';$db = new BaseModel();$doImport = $db -> doArraySqlActionsTran($sqlAll);//使用事务进行批量导入if ($doImport==TRUE){@unlink($uploadfile);//导入成功后删除上传文件return TRUE;}else{return FALSE;}}else {return FALSE;}Yii::app()->end();        //恢复Yii自动加载功能        spl_autoload_register(array('YiiBase','autoload'));}

     该方法中没有进行数据格式的转换,大家可以根据自己的情况进行转换。
0 0