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中处理模拟rewrite 效果
Dec 09 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
PHP多例模式介绍
Jun 24 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
Laravel框架之解决前端显示图片问题
Oct 24 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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版(2)
2006/10/09 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
集体婚礼证婚词
2014/01/13 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
校运会入场式解说词
2014/02/10 职场文书
高中班主任评语
2014/12/30 职场文书
合理化建议书
2015/02/04 职场文书
招商银行工作证明
2015/06/17 职场文书
革命电影观后感
2015/06/18 职场文书
爱国主义主题班会
2015/08/14 职场文书
学风建设主题班会
2015/08/17 职场文书