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 相关文章推荐
3
Oct 09 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
浅谈discuz密码加密的方式
May 22 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
PHP实现事件机制的方法
Jul 10 PHP
深入理解PHP内核(一)
Nov 10 PHP
php文件缓存方法总结
Mar 16 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP树形结构tree类用法示例
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
php strnatcmp()函数的用法总结
2013/11/27 PHP
教你php如何实现验证码
2016/01/20 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jquery中动态效果小结
2010/12/16 Javascript
js确定对象类型方法
2012/03/30 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
urllib2自定义opener详解
2014/02/07 Python
python自动裁剪图像代码分享
2017/11/25 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
详解python读取image
2019/04/03 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
华为C++笔试题
2014/08/05 面试题
研发工程师的岗位职责
2013/11/18 职场文书
大学生求职自荐信
2013/12/12 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
入党介绍人意见范文
2015/06/01 职场文书
活着观后感
2015/06/03 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python