前言
作为一个服务端开发人员,在日常开发过程中,难免会碰到一些凭借自己能力短期内无法解决的问题,比如说下午接到一个需求——需要导出一份客户的日常数据为excel表格的形式,如果凭借自己的力量可能一个PHP和Excel软件联动的API都写不出来,所以这时就体现出善用开源第三方类库的重要性,直接下载已经写好的类,阅读接口文档,调用其中的方法实现需求是最快最稳健的实现方法
环境背景
在公司实习期间碰到了这个需求,如标题所示,环境和需求已经明确——需要在TP3.2框架中完成这个导出所需数据的excel表格
解决步骤
1.首先找到自己语言所写好的第三方开源类,这里用到的是PHPExcel,在此分享github地址和中文手册地址
github地址戳这里
PHPExcel中文手册详解地址戳这里
2.下载好PHPExcel后将其解压,只需要Classes文件夹里的东西
3.接下来就是在框架里加载这个类,由于是TP3.2版本过老,对Composer的支持还不能做到自动加载需要手动引入下,将上一步解压好的类文件放在TP3.2的对应Org目录下 并在所需要用到的地方将其import进来如图所示
4.所有准备工作都已做好,根据文档写个小demon试试手吧
大概思路就是:先new一个PHPExcel对象,通过这个对象的链式操作方法,一步一步将所需要的值设定好,例如
$excel = new \PHPExcel();
$excel->getProperties()->setCreator("Puppy");
$excel->getProperties()->setTitle('User');
$excel->getProperties()->setSubject("testForExportExcel");
提示: 这几句话的设置在很多时候没有必要,平常一个excel文件,没人会打开它的属性看他的详细信息,setCreator是设置创建这个文件的作者等。。
重点是之后的操作:
首先设置当前操作的sheet如图所示sheet也默认下标从0开始,setActiveSheetIndex()就是为了让之后的所有操作都作用于此sheet
再之后,从数据库中用Model提前写好的方法获取数据,然后用如下的方法一一赋值 ,key是表格对应的位置,如A1,B1等,而value就是需要填进对应表格的值
$excel->getActiveSheet()->setCellValue("key","value");
最后将写好的数据表格提供下载链接给用户就行了,在这里贴出比较官方点的实现方法,直接调用就好
$filename = "testForExportExcel";
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$objWriter = new \PHPExcel_Writer_Excel5($excel);
$objWriter->save('php://output');