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代码
Mar 08 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
php分页函数示例代码分享
Feb 24 PHP
php生成RSS订阅的方法
Feb 13 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
php简单日历函数
Oct 28 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
php实现评论回复删除功能
May 23 PHP
Laravel 连接(Join)示例
Oct 16 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 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
一个捕获函数输出的函数
2007/02/14 PHP
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
python中字符串的操作方法大全
2018/06/03 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
详解python读取和输出到txt
2019/03/29 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
python中的yield from语法快速学习
2020/11/06 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
中间件分为哪几类
2016/09/18 面试题
大课间体育活动方案
2014/03/12 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫