首先需要下载PHPExcel
PHPExcel下载地址:https://pan.baidu.com/s/1GjbcSXxHwbLeBw8NzzIBYA
提取码:zbqq
使用composer 命令(本人使用的方法,具体怎么下载,看你心情咯~~)
cmd命令进入项目的根目录->composer require phpoffice/phpexcel
一、导出excel
控制器中引入类文件
vendor ( 'PHPExcel' );vendor ( 'PHPExcel.PHPExcel_IOFactory' );vendor ( 'PHPExcel.PHPExcel_Cell' );控制器php代码
public function index()//EXCL表格的导出 { $data = Db::table('score')->select(); $name = 'test'; $excel = new \PHPExcel(); //引用phpexcel iconv('UTF-8', 'gb2312', $name); //针对中文名转码 $header = ['ID', 'sid', '语文', '数学', '英语', '政治', '学期']; //表头,名称可自定义 $excel->setActiveSheetIndex(0); $excel->getActiveSheet()->setTitle($name); //设置表名 $excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(18); $excel->getActiveSheet()->getColumnDimension('B')->setWidth(80); $letter = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];//列坐标//生成表头 for ($i = 0; $i < count($header); $i++) { //设置表头值 $excel->getActiveSheet()->setCellValue("$letter[$i]1", $header[$i]); //设置表头字体样式 $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setName('宋体'); //设置表头字体大小 $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setSize(14); //设置表头字体是否加粗 $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setBold(true); //设置表头文字水平居中 $excel->getActiveSheet()->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //设置文字上下居中 $excel->getActiveSheet()->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); //设置单元格背景色 $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->getStartColor()->setARGB('FFFFFFFF'); $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->getStartColor()->setARGB('FF6DBA43'); //设置字体颜色 $excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->getColor()->setARGB('FFFFFFFF'); } //写入数据 foreach ($data as $k => $v) { //从第二行开始写入数据(第一行为表头) $excel->getActiveSheet()->setCellValue('A' . ($k + 2), $v['id']); $excel->getActiveSheet()->setCellValue('B' . ($k + 2), $v['sid']); $excel->getActiveSheet()->setCellValue('C' . ($k + 2), $v['chinese']); $excel->getActiveSheet()->setCellValue('D' . ($k + 2), $v['math']); $excel->getActiveSheet()->setCellValue('E' . ($k + 2), $v['english']); $excel->getActiveSheet()->setCellValue('F' . ($k + 2), $v['politics']); $excel->getActiveSheet()->setCellValue('G' . ($k + 2), $v['xqid']); } //设置单元格边框 $excel->getActiveSheet()->getStyle("A1:E" . (count($data) + 1))->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);//清理缓冲区,避免中文乱码 ob_end_clean(); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $name . '.xls"'); header('Cache-Control: max-age=0'); //导出数据 $res_excel = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $res_excel->save('php://output'); }到此,已经可以导出excel了。二、excel导入首先还是引入相关的类文件
vendor('PHPExcel.Writer.IWriter');vendor('PHPExcel.Writer.Abstract');vendor('PHPExcel.Writer.Excel5');vendor('PHPExcel.Writer.Excel2007');vendor('PHPExcel.IOFactory');前端excel上传页面
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><form enctype="multipart/form-data" method="post" action="index3"> <input type="file" name="excel" /> <br> <input type="submit" value="上传" /></form></body></html>//请忽略前端页面的样式,重点是功能,嘻嘻^_^将文件上传到index3控制器中index3的php代码
public function index3(){
// 获取表单上传文件$file = request()->file('excel');// 移动到框架应用根目录/public/uploads/ 目录下if ($file) { $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'); if ($info) { $path = ROOT_PATH . 'public' . DS . 'uploads' . DS; $filename = $info->getSaveName(); $file_path = $path . $filename; $objPHPExcel = \PHPExcel_IOFactory::load($file_path);//读取上传的文件 $arr = $objPHPExcel->getSheet(0)->toArray();//获取其中的数据 $end=[]; array_shift($arr);//将从excel表中获取到的数组中的标题删除,只留下数据 foreach ($arr as $k=>$v){//将获取到的索引数组改为关联数组,方便操作 $len=count($arr); for($i=0;$i<$len;$i++){ switch ($i){ case 0: $end[$k]['id']=$v[$i];//将key改为自己数据库中存储的字段的名称 break; case 1: $end[$k]['name']=$v[$i]; break; case 2: $end[$k]['sex']=$v[$i]; break; case 3: $end[$k]['age']=$v[$i]; break; } } } echo "<pre>"; print_r($end); exit;//excel中的数据已经得到了,剩余将数据插入数据库。请自行书写^_^.. } else { echo $file->getError(); } }}
以上代码本人亲测,导入。导出均可以实现。各位大佬对此有疑问的或者有更好的方法,感谢告知!!一起努力,共同进步。