php实现导出excel功能(转)
写在前面:马上面临着毕业设计的系统检查,为避免bug侧漏,不断的进行项目优化,目前在bug池中已经游走了一两天了,重要的是自己在bug池游走的过程中还不忘记给自己增加新的功能,比如,我认为加一个批量的导出功能可以为毕业设计提分,omg,说一不二开始捯饬excel导出;
问题:如何自定义的导出,如何定义自己想要的模板呢?
1.首先下载phpExcel 文件 https://pan.baidu.com/s/1ITnaVJ1n6pujku3YgMc-7w 提取码: nb4m
2.解压文件到php的vender的文件夹下面
3.进行编写导出的代码
在cntroller中新建立一个文件(防止与其他的逻辑代码混合)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
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:如何进行解析表格存放在数据库中呢
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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,然后可以进行解析,