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中的 == 运算符进行字符串比较
Nov 26 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
PHP防盗链代码实例
Aug 27 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
php文件读取方法实例分析
Jun 20 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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的ob_start() 控制您的浏览器cache
2009/08/03 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
javascript中的对象创建 实例附注释
2011/02/08 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
python实现requests发送/上传多个文件的示例
2018/06/04 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
《日月潭》教学反思
2014/02/28 职场文书
班级寄语大全
2014/04/10 职场文书
应聘会计求职信
2014/06/11 职场文书
励志演讲稿800字
2014/08/21 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL