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数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
php 操作调试的方法
Jul 12 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
php生成zip文件类实例
Apr 07 PHP
php eval函数一句话木马代码
May 21 PHP
php中二分法查找算法实例分析
Sep 22 PHP
PHP7多线程搭建教程
Apr 21 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 PHP
PHP实现随机发放扑克牌
Apr 21 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和ACCESS写聊天室(四)
2006/10/09 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
拖动时防止选中
2017/02/03 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
公司董事长职责
2013/12/12 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
家长给学校的建议书
2014/05/15 职场文书
意向书范本
2014/07/29 职场文书
付款委托书范本
2014/10/05 职场文书
暑假打工感想
2015/08/07 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS