ThinkPHP中用PHPExcel导出excel文件数据例子
PHPExcel导出excel对于这个插件来讲是非常的简单了,但在thinkphp中并不那么简单了,有不少的朋友不知道如何操作,下面小编就为大家介绍ThinkPHP中用PHPExcel导出excel文件的过程。
下面给出步骤:
1.准备:自己制作一个生成的excel参考的模板文件,template.xls,我的模板为
在这个模板里面,你想在哪个位置显示什么样式就设置什么样式,到时候相对应位置 查出来的数据就会自动套用样式,比如说标题大小,背景颜色,用函数等,都会自动套用,就不用在后台代码控制那么麻烦了,这个也是选择用模板生成excel原因。
附:
1.某列用条件格式等高级一点的操作应该也是可以的,没有试。
2.大家要注意一点,我要输出的数据是从第4行开始填充的,但是最好留出一行空的,比如说第5行,并不仅仅为了查出来的数据和统计总数分开好看,也是为了方便在模板里面设置函数,比如说上面的D6,用了SUM(D4:D5)函数,我是想统计D这一列的数据,但是在D6函数不能仅仅是=SUM(D4)吧,等生成数据的时候就到达不了效果,查出来的数据就是统计D4这个了,所以记得留出一行
2.下载PHPExcel文件,网上一百度就出来了,下载下来解压后目录结构如下:(附件中也提供有下载,附件中的PHPExcel是经过我的压缩,把多余的东西删除了的)
结构目录的说明,
1.下载下来的文件夹有3个文件夹和3个txt的说明文档(说明文档就不说了):
Classes文件夹:这个文件夹是PHPExcel的主要包,也就是说只要把这个文件夹拷贝到项目,引用就可以了。这个文件夹下面有PHPExcel.php文件和PHPExcel文件夹,引用的时候用PHPEx.php就可以了。
Documentation文件夹:说明文档,略过。
Tests文件夹:这个文件夹虽然不用导入到项目,但是里面满满的都是例子啊,都是给我们用的。我测试用的就是里面01simple-download-xls.php和30template.php这两个例子的代码结合在一起,分别是下载xls和加载模板的。
3.新建一个项目,导入ThinkPHP,配置好index.php,配置文件,在Public文件夹下面放我们的excel.模板文件。特别的,在ThinkPHP下面的Extend文件夹下新建文件夹Vendor,把PHPExcel复制到其根目录下。因为ThinkPHP中用PHPExcel不能通过
require './include/phpexcel/Classes/PHPExcel.php';这样加载,只能是用Vendor()加载第三方类库方式加进去。(这个很重要,我之前一直不成功原因就是在这里)
5.我的项目目录如下:
6.在IndexAction中的index()内写如下方法
7.在模板页调用上面的方法就可以了,比如<a href="{:U('Index/outexcel')}">导出excel</a>
当然啦,想根据条件来导出内容就看你怎么查数据库咯。
<?php 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 (); } }
写最后:当然啦,我是做好了才截图上来的,所以还没有完善,还要处理一下问题滴,比如说乱码 啊(看你下载下来的有没有乱码咯)。
永久地址:http://www.phprm.com/database/72269.html
转载随意~请带上教程地址吧^^