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 数字左侧自动补0
Mar 31 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
学习php分页代码实例
Oct 24 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
Apr 10 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
eclipse php wamp配置教程
Jun 30 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
php curl常用的5个经典例子
Jan 20 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 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
星际争霸任务指南——神族
2020/03/04 星际争霸
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
移动节点的jquery代码
2014/01/13 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
Python SQLite3简介
2018/02/22 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
详解python和matlab的优势与区别
2019/06/28 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
高中生毕业自我鉴定范文
2013/12/22 职场文书
迎接领导欢迎词
2014/01/11 职场文书
小学新学期教师寄语
2014/01/18 职场文书
绩效考核实施方案
2014/03/18 职场文书
图书室标语
2014/06/21 职场文书
护理见习报告范文
2014/11/03 职场文书
2014年妇女工作总结
2014/12/06 职场文书
高考1977观后感
2015/06/04 职场文书
高中信息技术教学反思
2016/02/16 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
基于Python实现将列表数据生成折线图
2022/03/23 Python