一、安裝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'); }