准备工作:
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文件
代码如下:

<?php
/*** Created by lonm.shi.* Date: 2012-02-09* Time: 下午4:54* To change this template use File | Settings | File Templates.*/class ExportStatisticsAction extends Action { public function index(){$model= D("OrdersView");$OrdersData= $model->select();  //查询数据得到$OrdersData二维数组vendor("PHPExcel176.PHPExcel");// Create new PHPExcel object$objPHPExcel = new PHPExcel();// Set properties$objPHPExcel->getProperties()->setCreator("ctos")->setLastModifiedBy("ctos")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");//set width$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(50);$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);//设置行高度$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);//set font size bold$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getFont()->setBold(true);$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//设置水平居中$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//合并cell$objPHPExcel->getActiveSheet()->mergeCells('A1:J1');// set table header content$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '订单数据汇总  时间:'.date('Y-m-d H:i:s'))->setCellValue('A2', '订单ID')->setCellValue('B2', '下单人')->setCellValue('C2', '客户名称')->setCellValue('D2', '下单时间')->setCellValue('E2', '需求机型')->setCellValue('F2', '需求数量')->setCellValue('G2', '需求交期')->setCellValue('H2', '确认BOM料号')->setCellValue('I2', 'PMC确认交期')->setCellValue('J2', 'PMC交货备注');// Miscellaneous glyphs, UTF-8for($i=0;$i<count($OrdersData)-1;$i++){$objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $OrdersData[$i]['id']);$objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $OrdersData[$i]['realname']);$objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $OrdersData[$i]['customer_name']);$objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), toDate($OrdersData[$i]['create_time'])); //这里调用了common.php的时间戳转换函数$objPHPExcel->getActiveSheet(0)->setCellValue('E'.($i+3), $OrdersData[$i]['require_product']);$objPHPExcel->getActiveSheet(0)->setCellValue('F'.($i+3), $OrdersData[$i]['require_count']);$objPHPExcel->getActiveSheet(0)->setCellValue('G'.($i+3), $OrdersData[$i]['require_time']);$objPHPExcel->getActiveSheet(0)->setCellValue('H'.($i+3), $OrdersData[$i]['product_bom_encoding']);$objPHPExcel->getActiveSheet(0)->setCellValue('I'.($i+3), $OrdersData[$i]['delivery_time']);$objPHPExcel->getActiveSheet(0)->setCellValue('J'.($i+3), $OrdersData[$i]['delivery_memo']);$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);$objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);}//  sheet命名$objPHPExcel->getActiveSheet()->setTitle('订单汇总表');// Set active sheet index to the first sheet, so Excel opens this as the first sheet$objPHPExcel->setActiveSheetIndex(0);// excel头参数header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="订单汇总表('.date('Ymd-His').').xls"');  //日期为文件名后缀header('Cache-Control: max-age=0');$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel5为xls格式,excel2007为xlsx格式$objWriter->save('php://output');}
}

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

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

  1. Atitit.导出excel报表的设计与实现java .net php 总

    Atitit.导出excel报表的设计与实现java .net php 总结 1. 导出报表 表格的设计要素1 1.1. 支持通用list<Map>转换1 1.2. 对于空列是否输出1 1 ...

  2. 在.NET中不安装Office使用EPPlus生成带图表(Chart)的Excel报表

    在开发.NET应用中可能会遇到需要生成带图表(Chart)的Excel报表的需求,特别是在一些ASP.NET网站中,有时候我们并不能保证Web服务器上一定安装了Office组件,所以使用微软的Offi ...

  3. Python 每日定时查询数据库生成Excel报表,并群发邮件

    最近在做游戏打点数据的一些统计处理,写了个Python脚本完成每日定时自动查询生成Excel报表并群发邮件的小功能. 拆解几个需求点: 一.连接数据库并查询 以下是一个查询总注册人数的示例代码,hos ...

  4. php导出excel报表

    php导出excel报表方式网上有很多种,有的方法已经过时,有的看不懂,运行有错误,所以找资料时难免苦恼.在这里给大家分享一个简单易用的方法,致力于让大家一看就会,信心百倍.结合实例,利用PHPExc ...

  5. 利用PHPExcel转Excel饼图

    PHPExcel处理Excel档真是个强大的工具,我有张报表,带饼图,需要转成Excel,   PHPExcel有一个相关的例子,参考并修改后实现了这个效果, 可以让用户在点击下载过程中生成和下载Ex ...

  6. python自动汇总表格_用Python自动生成Excel报表

    作者 / 来源:林骥(ID:linjiwx) 01 安装和导入模块 以 Python 中的 openpyxl 模块为例,它能够读取和修改 Excel 文件,如果你还没有安装,可以通过以下命令进行安装: ...

  7. [译] Python 自动处理 Excel 报表

    原文 A Simple Guide to Automate Your Excel Reporting with Python Use openpyxl to automate your Excel r ...

  8. 用Python自动生成Excel报表

    在日常工作中,可能会有一些重复无聊的任务,比如说,从 Excel 或数据库中收集一些数据,设置相应的数据格式并做成报表. 类似这种重复无聊的任务,我们完全可以交给 Python 去自动完成,只要第一次 ...

  9. django项目 html报表和excel报表写入并通过邮件发送到outlook和QQ邮箱

    目录 demo2项目 html报表效果 将报表写入excel,并使用邮件发送QQ邮箱和outlook邮箱效果[动图时长1分多钟] demo2项目完整文件夹结构 sql.py文件上半部分 sql.py文 ...

最新文章

  1. Spark Troubleshooting - Task not serializable问题分析
  2. 二进制安装 kubernetes 1.12(三) - 部署 Master 节点组件
  3. 最小正连续子序列和 问题
  4. 解决 The word is not correctly spelled问题
  5. [转载] 七龙珠第一部——第002话 布玛没有尾巴
  6. 机器学习-分类之多层感知机原理及实战
  7. Python3实现最小栈
  8. java生成带文字的图片_Java在背景图片上面加文字或者文字自动生成图片
  9. 012.对netmap API的解读
  10. 股票决定卖不卖?近六成粉丝支持马斯克出售10%特斯拉股票
  11. 微信小程序和百度的语音识别接口详解
  12. python入门11 元组tuple
  13. struts1的actionform
  14. 不断网情况下,如何关闭红蜘蛛多媒体网络教室
  15. 干货!!不同程序员岗位对不同电脑性能的要求(编程开发选电脑)
  16. 最实用的chrome插件,助高效开发,加快步伐!
  17. 史上最详细SharePoint 2007安装步骤图解新手教程
  18. 10个谈话技巧让你平步青云
  19. 稀疏矩阵——实现三元组,十字链表下的稀疏矩阵的加、转、乘的
  20. 认识华为 | 华为最基本的使命是活下去

热门文章

  1. 02-Go语言基础变量和常量
  2. FLASH场景的片头loading
  3. 【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[1]:验证模型
  4. Vert.x(vertx) 简明介绍
  5. “金三银四”是找工作的最佳时期吗?那倒未必
  6. 《程序员度量:改善软件团队的分析学》一涟漪效应
  7. ToList()方法
  8. uin-app md5加密(超简单)
  9. 什么是区块链合同?有哪些应用场景?
  10. matlab 二进制补码转十进制,MATLAB浮点数与定点二进制补码互转算法验证方案