Heim >Backend-Entwicklung >PHP-Tutorial >php怎么导出excel
php怎么导出excel?
如何自定义的导出,如何定义自己想要的模板呢?
1.首先下载phpExcel 文件
2.解压文件到php的vender的文件夹下面
3.进行编写导出的代码
在cntroller中新建立一个文件(防止与其他的逻辑代码混合)
public function clubpeople(){<br>//可以进行自定义传值,比如一个id,去向数据库找那个取出值 if(isset($_GET['club_id'])){ $clubid=$_GET['club_id']; } //获取到get参数 //1.从数据库中导出需要进行要导出的数据 $list =Db::query('SELECT stu_list.stu_name,stu_list.stu_department,stu_list.stu_phone,stu_list.stu_email,stu_list.stu_profess ,club_branch.* FROM club_branch INNER JOIN stu_list ON club_branch.stu_number = stu_list.stu_number where club_branch.club_id=:acc order by club_branch.club_branch_name ',['acc'=>$clubid]); //重要补助 //2.加载PHPExcle类库 vendor('PHPExcel.PHPExcel'); //3.实例化PHPExcel类 $objPHPExcel = new \PHPExcel(); //4.激活当前的sheet表 $objPHPExcel->setActiveSheetIndex(0); //5.设置表格头(即excel表格的第一行) $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '部门') ->setCellValue('B1', '职位') ->setCellValue('C1', '学号') ->setCellValue('D1', '学生姓名') ->setCellValue('E1', '联系方式') ->setCellValue('F1', '邮箱') ->setCellValue('G1', '院系') ->setCellValue('H1', '专业'); //设置A列水平居中 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //设置单元格宽度 //6.循环刚取出来的数组,将数据逐一添加到excel表格。 $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(10); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(30); for($i=0;$i<count($list);$i++){ $objPHPExcel->getActiveSheet()->setCellValue('A'.($i+2),$list[$i]['club_branch_name']);//ID $objPHPExcel->getActiveSheet()->setCellValue('B'.($i+2),$list[$i]['club_position']);//标签码 $objPHPExcel->getActiveSheet()->setCellValue('C'.($i+2),$list[$i]['stu_number']);//防伪码 $objPHPExcel->getActiveSheet()->setCellValue('D'.($i+2),$list[$i]['stu_name']);//ID $objPHPExcel->getActiveSheet()->setCellValue('E'.($i+2),$list[$i]['stu_phone']);//标签码 $objPHPExcel->getActiveSheet()->setCellValue('F'.($i+2),$list[$i]['stu_email']);//ID $objPHPExcel->getActiveSheet()->setCellValue('G'.($i+2),$list[$i]['stu_department']);//标签码 $objPHPExcel->getActiveSheet()->setCellValue('H'.($i+2),$list[$i]['stu_profess']);//防伪码 } //7.设置保存的Excel表格名称 $filename = $club_name.'人员名单'.date('ymd',time()).'.xls'; //8.设置当前激活的sheet表格名称; $objPHPExcel->getActiveSheet()->setTitle('人员名单'); //9.设置浏览器窗口下载表格 header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="'.$filename.'"'); //生成excel文件 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //下载文件在浏览器窗口 $objWriter->save('php://output'); exit; }
这样一个下载的表格就完成了,
2:如何进行解析表格存放在数据库中呢
public function getExcel(){ <br>//首先要判断当前是否与文件传过来,并判断文件传输是否正确 if(isset($_FILES["file"]) && ($_FILES["file"]["error"] == 0)){ $file = $_FILES['file']; $path = $file['tmp_name']; //读取excel $arr = $this->excel($path, 0); $result =$arr;//用来记录当前操作的错误之类的 //当解析完数据结构之后,就可以进行实地的插入数据库操作了,此处省略掉这个部分~ $number = mt_rand(999, 9999);//随机数返回前端,取名字 session('file'.$number ,$arg); //保存当前的一个报告结果数组,可以对报告进行下载 $resultr['status']=1; $resultr['msg']= $number; return json($resultr); }else{ $resultarr['status']=0; $resultarr['msg']='文件上传发生错误,,稍后再试'; return json($resultarr); } }
public function excel($filePath='', $sheet=0){ import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Reader.Excel5"); import("Org.Util.PHPExcel.Reader.Excel2007"); if(empty($filePath) or !file_exists($filePath)){die('file not exists');} $PHPReader = new \PHPExcel_Reader_Excel2007(); //建立reader对象 if(!$PHPReader->canRead($filePath)){ $PHPReader = new \PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)){ echo 'no Excel'; return ; } } $PHPExcel = $PHPReader->load($filePath); //建立excel对象 $currentSheet = $PHPExcel->getSheet($sheet); //**读取excel文件中的指定工作表*/ $allColumn = $currentSheet->getHighestColumn(); //**取得最大的列号*/ $allRow = $currentSheet->getHighestRow(); //**取得一共有多少行*/ $data = array(); for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){ //循环读取每个单元格的内容。注意行从1开始,列从A开始 for($colIndex='A';$colIndex<=$allColumn;$colIndex++){ $addr = $colIndex.$rowIndex; $cell = $currentSheet->getCell($addr)->getValue(); if($cell instanceof PHPExcel_RichText){ //富文本转换字符串 $cell = $cell->__toString(); } $data[$rowIndex][$colIndex] = $cell; } } return $data; }
omg~~三段代码完成的功能分别是导出excel,还有就是上传excel,然后可以进行解析。
更多相关知识,请访问PHP中文网!