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 相关文章推荐
网页游戏开发入门教程二(游戏模式+系统)
Nov 02 PHP
PHP mcrypt可逆加密算法分析
Jul 19 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 PHP
php源码的安装方法和实例
Sep 26 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 PHP
php数值计算num类简单操作示例
May 15 PHP
PHP加MySQL消息队列深入理解
Feb 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笔记之:文章中图片处理的使用
2013/04/26 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
php中关于换行的实例写法
2019/09/26 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
初始Nodejs
2014/11/08 NodeJs
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
python利用正则表达式提取字符串
2016/12/08 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
Python 使用office365邮箱的示例
2020/10/29 Python
python绘制高斯曲线
2021/02/19 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
AJax面试题
2014/11/25 面试题
大学生旷课检讨书1000字
2015/02/19 职场文书
老乡聚会通知
2015/04/23 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android