文档章节

完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

mickelfeng
 mickelfeng
发布于 2013/05/08 18:27
字数 922
阅读 320
收藏 9
准备工作:
1.下载phpexcel1.7.6类包;
2.解压至TP框架的ThinkPHP\Vendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图;
       
编写代码(以一个订单汇总数据为例):
  1. 创建数据库及表;
  2. 创建tp项目,配置项目的数据库连接,这些基本的就不说了;
  3. 在项目的Lib\Action下创建一个新的类文件ExportStatisticsAction.class.php,然后在  index方法中实现excel导出;
  4. 导出方法的步骤:
    ①查询数据
    ②导入phpexcel类库
    ③创建excel对象并设置excel对象的属性
    ④设置excel的行列样式(字体、高宽、颜色、边框、合并等)
    ⑤绘制报表表头
    ⑥将查询数据写入excel
    ⑦设置excel的sheet的名称
    ⑧设置excel报表打开后初始的sheet
    ⑨设置输出的excel的头参数及文件名
    ⑩调用创建excel的方法生成excel文件

代码如下:

  1. <?php  
  2. /** 
  3.  * Created by lonm.shi. 
  4.  * Date: 2012-02-09 
  5.  * Time: 下午4:54 
  6.  * To change this template use File | Settings | File Templates. 
  7.  */  
  8.    
  9. class ExportStatisticsAction extends Action {  
  10.     public function index(){  
  11.         $model= D("OrdersView");  
  12.         $OrdersData$model->select();  
  13.   
  14.         vendor("PHPExcel176.PHPExcel");  
  15.         // Create new PHPExcel object  
  16.         $objPHPExcel = new PHPExcel();  
  17.         // Set properties  
  18.         $objPHPExcel->getProperties()->setCreator("ctos")  
  19.             ->setLastModifiedBy("ctos")  
  20.             ->setTitle("Office 2007 XLSX Test Document")  
  21.             ->setSubject("Office 2007 XLSX Test Document")  
  22.             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")  
  23.             ->setKeywords("office 2007 openxml php")  
  24.             ->setCategory("Test result file");  
  25.   
  26.         //set width  
  27.         $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);  
  28.         $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);  
  29.         $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);  
  30.         $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);  
  31.         $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(50);  
  32.         $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10);  
  33.         $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);  
  34.         $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);  
  35.         $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);  
  36.         $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);  
  37.   
  38.         //设置行高度  
  39.         $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);  
  40.   
  41.         $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);  
  42.   
  43.         //set font size bold  
  44.         $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);  
  45.         $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getFont()->setBold(true);  
  46.   
  47.         $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
  48.         $objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
  49.   
  50.         //设置水平居中  
  51.         $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);  
  52.         $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  53.         $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  54.         $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  55.         $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  56.         $objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  57.         $objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  58.         $objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  59.   
  60.         //  
  61.         $objPHPExcel->getActiveSheet()->mergeCells('A1:J1');  
  62.   
  63.         // set table header content  
  64.         $objPHPExcel->setActiveSheetIndex(0)  
  65.             ->setCellValue('A1''订单数据汇总  时间:'.date('Y-m-d H:i:s'))  
  66.             ->setCellValue('A2''订单ID')  
  67.             ->setCellValue('B2''下单人')  
  68.             ->setCellValue('C2''客户名称')  
  69.             ->setCellValue('D2''下单时间')  
  70.             ->setCellValue('E2''需求机型')  
  71.             ->setCellValue('F2''需求数量')  
  72.             ->setCellValue('G2''需求交期')  
  73.             ->setCellValue('H2''确认BOM料号')  
  74.             ->setCellValue('I2''PMC确认交期')  
  75.             ->setCellValue('J2''PMC交货备注');  
  76.   
  77.         // Miscellaneous glyphs, UTF-8  
  78.         for($i=0;$i<count($OrdersData)-1;$i++){  
  79.             $objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $OrdersData[$i]['id']);  
  80.             $objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $OrdersData[$i]['realname']);  
  81.             $objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $OrdersData[$i]['customer_name']);  
  82.             $objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), toDate($OrdersData[$i]['create_time']));  
  83.             $objPHPExcel->getActiveSheet(0)->setCellValue('E'.($i+3), $OrdersData[$i]['require_product']);  
  84.             $objPHPExcel->getActiveSheet(0)->setCellValue('F'.($i+3), $OrdersData[$i]['require_count']);  
  85.             $objPHPExcel->getActiveSheet(0)->setCellValue('G'.($i+3), $OrdersData[$i]['require_time']);  
  86.             $objPHPExcel->getActiveSheet(0)->setCellValue('H'.($i+3), $OrdersData[$i]['product_bom_encoding']);  
  87.             $objPHPExcel->getActiveSheet(0)->setCellValue('I'.($i+3), $OrdersData[$i]['delivery_time']);  
  88.             $objPHPExcel->getActiveSheet(0)->setCellValue('J'.($i+3), $OrdersData[$i]['delivery_memo']);  
  89.             $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
  90.             $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
  91.             $objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);  
  92.         }  
  93.   
  94.   
  95.         // Rename sheet  
  96.         $objPHPExcel->getActiveSheet()->setTitle('订单汇总表');  
  97.   
  98.   
  99.         // Set active sheet index to the first sheet, so Excel opens this as the first sheet  
  100.         $objPHPExcel->setActiveSheetIndex(0);  
  101.   
  102.   
  103.         // Redirect output to a client’s web browser (Excel5)  
  104.         header('Content-Type: application/vnd.ms-excel');  
  105.         header('Content-Disposition: attachment;filename="订单汇总表('.date('Ymd-His').').xls"');  
  106.         header('Cache-Control: max-age=0');  
  107.   
  108.         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel'Excel5');  
  109.         $objWriter->save('php://output');  
  110.   
  111.     }  
  112. }  

5.调用导出方法直接  http://项目/index.php/ExportStatistics/index,项目中调用直接__APP__/ExportStatistics/index,生成的报表是下载方式来保存。phpexcel1.7.6没有发现什么编码问题,速度也很快,注意导出的方法中不能有任何页面输出信息或调试信息,否则导出的excel会提示格式不对。效果如下:
导出报表


本文转载自:http://blog.csdn.net/lonmshi/article/details/7253862

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 229
博文 2666
码字总数 569153
作品 0
成都
高级程序员
私信 提问
FineReport中JS如何自定义按钮导出

FineReport支持多种不同的导出方式,直接使用FineReport内置导出按钮可以非常快捷方便的来对各种格式的输出,但是我们在web页面集成中的时候,往往只想将报表内容嵌入到iframe中,而工具栏以...

雄霸天下啦
06/26
0
0
多维度 Excel 报表工具 - openhandx report

OpenHandx-Report是一个轻量级的多维度Excel报表工具,核心采用了Poi和OpenHandX-chart,同时支持Excel的2003和2007文件格式输出。OpenHandx-Report之所以只叫做报表工具,是因为OpenHandx-R...

辛巴8
04/17
0
0
解析和生成Excel报表方法汇总::.NET发现之旅(七)

昨天在医院检查身体时,一个朋友打过来电话,咨询EXCEL报表开发都有哪些方法,他们要上一个有200多个不同格式Excel报表的项目,虽然在医院做全身检查中,我还是给他提供了几点建议。在这里我...

terryli
2010/08/12
0
0
web报表开发技术专题五:Excel的阴影

自从n年前Excel击败Lotus,独霸电子表格软件市场以来。所有的表格类软件都不能不充分考虑Excel,寻找Excel照顾不到的功能点。所有的表格类软件都要被迫考虑和Excel兼容,能够导入导出Excel文...

长平狐
2012/10/11
141
0
报表开发之批量导入导出excel

在日常使用报表过程中,会有这样一种情况,你将Excel表分发给各个员工,员工填完后,统一整理成多个Excel,你需要将这些数据,用报表的填报功能,提交录入到数据库中,这样一来可避免到服务器...

九月你好123
2016/08/05
36
0

没有更多内容

加载失败,请刷新页面

加载更多

码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
3
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
6
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部