1.准备:自己制作一个生成的excel参考的模板文件,template.xls,我的模板为
2.大家要注意一点,我要输出的数据是从第4行开始填充的,但是最好留出一行空的,比如说第5行,并不仅仅为了查出来的数据和统计总数分开好看,也是为了方便在模板里面设置函数,比如说上面的D6,用了SUM(D4:D5)函数,我是想统计D这一列的数据,但是在D6函数不能仅仅是=SUM(D4)吧,等生成数据的时候就到达不了效果,查出来的数据就是统计D4这个了,所以记得留出一行
2.下载PHPExcel文件,网上一百度就出来了,下载下来解压后目录结构如下:(附件中也提供有下载,附件中的PHPExcel是经过我的压缩,把多余的东西删除了的)
结构目录的说明,
1.下载下来的文件夹有3个文件夹和3个txt的说明文档(说明文档就不说了):
require './include/phpexcel/Classes/PHPExcel.php';这样加载,只能是用Vendor()加载第三方类库方式加进去。(这个很重要,我之前一直不成功原因就是在这里)
5.我的项目目录如下:
6.在IndexAction中的index()内写如下方法
代码如下 | 复制代码 |
class IndexAction extends Action { /**导出的excel表格 */ function index() { //将需要导出到excel的数据查询出来 $mdata = M ( 'a' ); $data = $mdata->select (); //开始生成excel内容 /** 加载IOFactory包 */ Vendor ( 'Excel.Classes.PHPExcel' ); //Vendor路径的写法参考ThinkPHP文档 /** 错误信息 */ error_reporting ( E_ALL ); $objReader = PHPExcel_IOFactory::createReader ( 'Excel5' ); //在内存中建一个excel2003操作 //加载需要读取的模板放在内存的excel中,路径一定要对啊,我在index.php中用了define(ROOT, dirname(__FILE__));所以下面这样写 $objPHPExcel = $objReader->load ( ROOT . "/Pulice/template/template.xls" ); //设置excel格式 //$objPHPExcel->getActiveSheet ()->setCellValue ( 'B1', '统计表' ); //在B位置显示标题,可以动态添加,这个例子中我是在母版中写死了的 $objPHPExcel->getActiveSheet ()->setCellValue ( 'E1', date ( 'Y-m-d H:i:s', time () ) ); //在E位置显示时间 /**将数据用循环放进表格相对应位置S*/ $baseRow = 5; //数据从5-1行开始往下输出,具体数据看你的模板了 foreach ( $data as $r => $dataRow ) { $row = $baseRow + $r; $objPHPExcel->getActiveSheet ()->insertNewRowBefore ( $row, 1 ); //插入新的行 //将数据填充到相对应的位置 $objPHPExcel->getActiveSheet ()->setCellValue ( 'A' . $row, $r + 1 ); //序号 $objPHPExcel->getActiveSheet ()->setCellValue ( 'B' . $row, $dataRow ['codenum'] ); //编号 $objPHPExcel->getActiveSheet ()->setCellValue ( 'C' . $row, $dataRow ['name'] ); //物品名称 $objPHPExcel->getActiveSheet ()->setCellValue ( 'D' . $row, $dataRow ['price'] ); //单价 $objPHPExcel->getActiveSheet ()->setCellValue ( 'E' . $row, $dataRow ['quantity'] ); //数量 } $objPHPExcel->getActiveSheet ()->removeRow ( $baseRow - 1, 1 ); //作用:把最顶上面的那一空白行去掉 //---------上面的代码是从30template.php(加载模板)中copy下来自己改成我想要———————————————— // ----------下面的代码是从01simple-download-xls.php(下载excel表格)中copy下来的------- //将得到的数据导出到excel中提供给用户下载 // 将输出重新定向到客户端浏览器的(Excel5) $filename = date ( 'Y-m-d', time () ); header ( 'Content-Type: application/vnd.ms-excel' ); header ( 'Content-Disposition: attachment;filename="' . $filename . '.xls"' ); //要下载的excel文件的文件名,这设置了用当前时间作为文件名 header ( 'Cache-Control: max-age=0' ); $objWriter = PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); //在内存中准备一个excel2003文件 $objWriter->save ( 'php://output' ); exit (); } } |
7.在模板页调用上面的方法就可以了,比如导出excel
当然啦,想根据条件来导出内容就看你怎么查数据库咯。
写最后:当然啦,我是做好了才截图上来的,所以还没有完善,还要处理一下问题滴,比如说乱码 啊(看你下载下来的有没有乱码咯)。