Blogger Information
Blog 5
fans 0
comment 0
visits 5772
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Excel导出功能--结合tp5.0框架(超详细)
毅铭
Original
939 people have browsed it

目前,很多场景下都在使用Excel导出,现在结合ThinkPHP5.0框架详细说明下excel导出功能的实现步骤。

一. 准备工作
Excel的导出功能,在很多框架中都有配置,其中最广泛的就是使用composer来下载excel的扩展包,但是本人在使用的过程中,却发现了一个问题:TP5.0框架通过composer来下载excel扩展包,却出现了错误,原文是该扩展包已经被废弃,请使用别的版本。
最终,本人去github上下载了1.8版本的扩展包。
下载地址:PHPExcel1.8版本下载

二. 详细配置
【第一步】将下载的1.8扩展包解压,将里面全部内容复制到extend文件夹下,并改名为PHPExcel,如图:

复制并改名
【第二步】找到application/common.php,在里面写一个公共的导出函数,这样,其他控制器均可以使用,详细信息请看代码注释,函数代码如下:

请先在common.php文件顶部引入Loader类:use think\Loader;

function excelFileExport($data = [],$title='') { //文件名 $fileName = $title. '('.date("Y-m-d",time()) .'导出)'. ".xls"; //加载第三方类库 Loader::import('PHPExcel.Classes.PHPExcel'); Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory'); //实例化excel类 $excelObj = new \PHPExcel(); //构建列数--根据实际需要构建即可 $letter = array('A', 'B', 'C', 'D'); //表头数组--需和列数一致 $tableheader = array('学号','姓名', '年龄', '性别'); //填充表头信息 for ($i = 0; $i < count($tableheader); $i++) { $excelObj->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]"); } //循环填充数据 foreach ($data as $k => $v) { $num = $k + 1 + 1; //设置每一列的内容 $excelObj->setActiveSheetIndex(0) ->setCellValue('A' . $num, $v['number']) ->setCellValue('B' . $num, $v['name']) ->setCellValue('C' . $num, $v['age']) ->setCellValue('D' . $num, $v['sex']); //设置行高 $excelObj->getActiveSheet()->getRowDimension($k+4)->setRowHeight(30); } //以下是设置宽度 $excelObj->getActiveSheet()->getColumnDimension('A')->setWidth(46); $excelObj->getActiveSheet()->getColumnDimension('B')->setWidth(20); $excelObj->getActiveSheet()->getColumnDimension('C')->setWidth(10); $excelObj->getActiveSheet()->getColumnDimension('D')->setWidth(20); //设置表头行高 $excelObj->getActiveSheet()->getRowDimension(1)->setRowHeight(28); $excelObj->getActiveSheet()->getRowDimension(2)->setRowHeight(28); $excelObj->getActiveSheet()->getRowDimension(3)->setRowHeight(28); //设置居中 $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //所有垂直居中 $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //设置字体样式 $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('黑体'); $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(20); $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true); $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true); $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('宋体'); $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(16); $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getFont()->setSize(10); //设置自动换行 $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setWrapText(true); // 重命名表 $fileName = iconv("utf-8", "gb2312", $fileName); // 设置下载打开为第一个表 $excelObj->setActiveSheetIndex(0); //设置header头信息 header('Content-Type: application/vnd.ms-excel;charset=UTF-8'); header("Content-Disposition: attachment;filename={$fileName}"); header('Cache-Control: max-age=0'); $writer = \PHPExcel_IOFactory::createWriter($excelObj, 'Excel5'); $writer->save('php://output'); exit();}

【第三步】新建一个控制器:Student.php,Student控制器中新建一个方法export(),在该方法中调用common.php中的excelFileExport()方法,如下:

public function export(){ //该处应为从数据库中查出数据,这里仅作演示: $data = Db::name('student')->select(); //因不同需求,文件名不同,需要自己构建 $fileName = '学生信息表'; //调用公共方法 excelFileExport($data,$fileName);}

【第四步】在html中写一个标签,点击请求Student控制器中的export()方法,即可完成下载。

==总结==
此例,大致分为三个大步骤:
1.将下载的 1.8版本扩展包融合到TP5.0框架中;
2.在common.php写一个导出的公共函数;
3.在控制器中调用该公共函数

【注意】公共函数中的列数根据实际需要更改即可 ,尽量在控制器中查出的数据字段数和列数保持相同

至此,TP5.0的excel导出功能已经基本完成,如需其他配置,请参考phpExcel开发文档。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply withNews Comment Service Agreement
0 comments
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!