ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】


Posted in PHP onMay 12, 2018

本文实例讲述了ThinkPHP框架实现导出excel数据的方法。分享给大家供大家参考,具体如下:

在ThinkPHP框架下,导出excel数据的方法示例:

在操作前,应该在系统框架的扩展目录中添加ORG库,即要包含ThinkPHP\Extend\Library\ORG\Util\PHPExcel.class.php文件及其相关支持文件。

<?php
header("Content-type: text/html; charset=utf-8");
class MesTestAction extends Action {
  //测试导出excel数据
  public function tpGetExcel() {
    //创建对象
    import("ORG.Util.PHPExcel"); //从PHPExcel目录导PHPExcel.php类文件
    $excel = new PHPExcel();
    $data = M()->query('SELECT userid,username,stepgoal FROM tp_data_user LIMIT 2775');
    //Excel表格式,这里简略写了3列
    $letter = array('A','B','C');
    //表头数组
    $tableheader = array('userid','用户名','目标步数');
    $count= count($data);//总的数据行数
    $listNum = 500;//每个sheet页最大数据行数
    $num = ceil($count/$listNum);//sheet页个数
    $MuitData = array_chunk($data,$listNum,false);//分割总的数据,每页最多$listNum行有效数据
  //var_dump($MuitData);//die('as');
  //缺省情况下,PHPExcel会自动创建第一个SHEET,其索引SheetIndex=0
  //设置 当前处于活动状态的SHEET 为PHPExcel自动创建的第一个SHEET
  $excel->setActiveSheetIndex(0); //objPHPExcel
  //设置sheet的title
  $excel->getActiveSheet()->setTitle('考核得分第'.'1'.'页');
  //设置sheet的列名称
    for($k = 0; $k < count($tableheader); ++$k) {
      $excel->getActiveSheet()->setCellValue("$letter[$k]".'1',"$tableheader[$k]");//第一行数据
    }
  //填充表格信息 处理第1块数据
  $crrntSheetLineNo = count($MuitData[0]) + 1;
  for ( $j = 2; $j <= $crrntSheetLineNo; ++$j) { //遍历每一行
    $k = 0;
    foreach ( $MuitData[0][$j - 2] as $key => $value ) {//遍历具体行的某一列
      $excel->getActiveSheet()->setCellValue("$letter[$k]".$j,"$value");//第$k列 第$j行
      $k++;
    }
  }
  //后续的sheet页及数据块
    for ( $i = 1; $i <$num; ++$i) {
      //创建第$i个sheet
      $msgWorkSheet = new PHPExcel_Worksheet($excel, '考核得分第'.($i + 1).'页'); //创建一个工作表
      $excel->addSheet($msgWorkSheet); //插入工作表
      $excel->setActiveSheetIndex($i); //切换到新创建的工作表
      //设置sheet的列名称
      for($k = 0; $k < count($tableheader); ++$k) {
        $excel->getActiveSheet()->setCellValue("$letter[$k]1","$tableheader[$k]");//第一行数据
      }
      //填充表格信息 处理第$i块数据
    $crrntSheetLineNo = count($MuitData[$i]) + 1; //var_dump($crrntSheetLineNo);var_dump($MuitData[$i-1]);die('as');
      for ( $j = 2; $j <= $crrntSheetLineNo; ++$j) { //遍历每一行
        $k = 0;
        foreach ( $MuitData[$i-1][$j - 2] as $key => $value ) {//遍历具体行的某一列
          $excel->getActiveSheet()->setCellValue("$letter[$k]$j","$value");//第$k列 第$j行
          ++$k;
        }
      }
      usleep(100);
    }
    //创建Excel输出对象
    $filename = "大奖赛培训考核得分.xls";
    $write = new PHPExcel_Writer_Excel5($excel);
    ob_end_clean();//清除缓冲区,避免乱码
  /*
  //输出到本地
    $write->save( iconv('utf-8', 'gbk', $filename) );
  */
    //输出到浏览器
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
    header("Content-Type:application/force-download");
    header("Content-Type:application/vnd.ms-execl");
    header("Content-Type:application/download");
    header('Content-Type:application/octet-stream');
    $encoded_filename = urlencode($filename);
    $encoded_filename = str_replace("+", "%20", $encoded_filename);
    $ua = $_SERVER["HTTP_USER_AGENT"];
    if (preg_match("/MSIE/", $ua)) {
      header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
    } else if (preg_match("/Firefox/", $ua)) {
      header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
    } else {
      header('Content-Disposition: attachment; filename="' . $filename . '"');
    }
    header("Content-Transfer-Encoding:binary");
    $write->save('php://output');
  }
}
?>

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

PHP 相关文章推荐
php addslashes 函数详细分析说明
Jun 23 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
使用php清除bom示例
Mar 03 PHP
php自定义函数截取汉字长度
May 15 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 #PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 #PHP
PHP折半(二分)查找算法实例分析
May 12 #PHP
PHP区块查询实现方法分析
May 12 #PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 #PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 #PHP
PHP7基于curl实现的上传图片功能
May 11 #PHP
You might like
php获取文件名后缀常用方法小结
2015/02/24 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
python迭代器的使用方法实例
2013/11/21 Python
Python全局变量操作详解
2015/04/14 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
python实现静态服务器
2019/09/05 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
如何在sublime编辑器中安装python
2020/05/20 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
如何通过命令行进入python
2020/07/06 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
为什么使用接口?
2014/08/13 面试题
实习生的自我评价
2014/01/08 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
就业协议书怎么填
2014/09/15 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
教师个人学习总结
2015/02/11 职场文书
锅炉工岗位职责
2015/02/13 职场文书
校园安全主题班会
2015/08/12 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL