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 获得汉字拼音首字母的函数
Aug 01 PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 PHP
PHP实现懒加载的方法
Mar 07 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 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另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
python字典get()方法用法分析
2015/04/17 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
css3中transition属性详解
2014/09/02 HTML / CSS
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
诚信承诺书范文
2014/03/27 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android