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 相关文章推荐
第二节 对象模型 [2]
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
php使用json_encode对变量json编码
Apr 07 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
PHP 实现链式操作
Mar 09 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
php生成文件
2007/01/15 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
详解Python中的Cookie模块使用
2015/07/06 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python中logging实例讲解
2019/01/17 Python
python调用支付宝支付接口流程
2019/08/15 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
影视制作岗位职责
2013/12/04 职场文书
员工培训心得体会
2013/12/30 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
解决Python字典查找报Keyerror的问题
2021/05/26 Python
Python利用FlashText算法实现替换字符串
2022/03/31 Python