一、安装PHPExcel
1.下载:PHPExcel https://github.com/PHPOffice/PHPExcel
2.解压后:Classes文件夹改名为PHPExcel
3.把文件夹PHPExcel 放到根目录vendor文件夹下
二、控制器
1.调用PHPExcel
use PHPExcel_IOFactory; use PHPExcel;
2.导入
// 导入每日流水 public function posImport(){ header("content-type:text/html;charset=utf-8"); //上传excel文件 $file = request()->file('excel'); //将文件保存到public/uploads目录下面 $info = $file->validate(['size'=>1048576,'ext'=>'xls,xlsx'])->move( './uploads'); if($info){ //获取上传到后台的文件名 $fileName = $info->getSaveName(); //获取文件路径 $filePath = Env::get('root_path').'public'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.$fileName; //获取文件后缀 $suffix = $info->getExtension(); //判断哪种类型 if($suffix=="xlsx"){ $reader = PHPExcel_IOFactory::createReader('Excel2007'); }else{ $reader = PHPExcel_IOFactory::createReader('Excel5'); } }else{ $this->error('文件过大或格式不正确导致上传失败-_-!'); } //载入excel文件 $excel = $reader->load("$filePath",$encode = 'utf-8'); //读取第一张表 $sheet = $excel->getSheet(0); //获取总行数 $row_num = $sheet->getHighestRow(); //获取总列数 $col_num = $sheet->getHighestColumn(); $data = []; //数组形式获取表格数据 for ($i = 2; $i <= $row_num; $i ++) { $data[$i]['code'] = $sheet->getCell("A".$i)->getValue(); $data[$i]['last_code'] = substr($sheet->getCell("A".$i)->getValue(),-6); $time = date('Y-m-d H:i',PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell("B".$i)->getValue())); $data[$i]['time'] = strtotime($time); //将数据保存到数据库 } $res = Db::name('pos_code')->insertAll($data); if($res){ return redirect('/admin/pos/posCodeLog'); }else{ $return = [ 'code' => 0, 'msg' => '提交失败,请刷新重试' ]; return json($return); } }
3.导出
// 导出excel private function outExcel($data){ $objExcel = new PHPExcel(); $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5'); $objActSheet = $objExcel->getActiveSheet(0); $objActSheet->setTitle('领取报表');//设置excel的标题 $objActSheet->setCellValue('A1','用户id'); $objActSheet->setCellValue('B1','红包金额(元)'); $objActSheet->setCellValue('C1','时间'); $objActSheet->setCellValue('D1','发放状态'); $baseRow = 2; //数据从N-1行开始往下输出 这里是避免头信息被覆盖 foreach ( $data as $r => $d ) { $i = $baseRow + $r; $objExcel->getActiveSheet()->setCellValue('A'.$i,$d['user_id']); $objExcel->getActiveSheet()->setCellValue('B'.$i,$d['price']); $objExcel->getActiveSheet()->setCellValue('C'.$i,$d['create_time']); $objExcel->getActiveSheet()->setCellValue('D'.$i,$d['status'] == 1 ? '成功' : '失败'); } $objExcel->setActiveSheetIndex(0); //4、输出 $objExcel->setActiveSheetIndex(); header('Content-Type: applicationnd.ms-excel'); $time=date('Y-m-d'); header("Content-Disposition: attachment;filename=领取报表$time.xls"); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); }