thinkPHP+phpexcel实现excel报表输出功能示例


Posted in PHP onJune 06, 2017

本文实例讲述了thinkPHP+phpexcel实现excel报表输出功能。分享给大家供大家参考,具体如下:

准备工作:

1.下载phpexcel1.7.6类包;

2.解压至TP框架的ThinkPHP\Vendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图;

thinkPHP+phpexcel实现excel报表输出功能示例

编写代码(以一个订单汇总数据为例):

  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-8
    for($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会提示格式不对。效果如下:

导出报表

thinkPHP+phpexcel实现excel报表输出功能示例

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
php简单生成随机数的方法
Jul 30 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
基于PHP实现数据分页显示功能
May 26 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
PDO实现学生管理系统
Mar 21 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 #PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 #PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 #PHP
PHP培训要多少钱
Jun 06 #PHP
Mac系统完美安装PHP7详细教程
Jun 06 #PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 #PHP
PHP PDO操作MySQL基础教程
Jun 05 #PHP
You might like
收音机术语解释
2021/03/01 无线电
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
php中动态调用函数的方法
2015/03/16 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
js中日期的加减法
2015/05/06 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
Python pass 语句使用示例
2014/03/11 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
python全栈知识点总结
2019/07/01 Python
Python读取yaml文件的详细教程
2020/07/21 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
财务会计人员岗位职责
2013/11/30 职场文书
自荐信范文
2013/12/10 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
面试必备的求职信
2014/05/25 职场文书
咖啡店创业计划书
2014/08/15 职场文书
安全生产年活动总结
2014/08/29 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
大学生自荐信范文
2015/03/05 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
Python+pyaudio实现音频控制示例详解
2022/07/23 Python