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 防恶意刷新实现代码
May 16 PHP
php的一些小问题
Jul 03 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
php调用自己java程序的方法详解
May 13 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 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
基于mysql的bbs设计(三)
2006/10/09 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python 自定义装饰器实例详解
2019/07/20 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
2014年社会实践活动总结范文
2014/04/29 职场文书
节能宣传周活动总结
2014/05/08 职场文书
保险公司开门红口号
2014/06/21 职场文书
中标通知书
2015/04/17 职场文书
保险公司增员口号
2015/12/25 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书