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 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
PHP 基于文件头的文件类型验证类函数
May 01 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
浅析PHP开发规范
Feb 05 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 PHP
详解php反序列化
Jun 10 PHP
PHP笛卡尔积实现原理及代码实例
Dec 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
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
JS 字符串连接[性能比较]
2009/05/10 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
php与js的区别是什么
2013/08/05 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
Python yield 使用浅析
2015/05/28 Python
Python打印斐波拉契数列实例
2015/07/07 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
大四学年自我鉴定
2013/11/13 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
成都人事代理协议书
2014/10/25 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
js之ajax文件上传
2021/05/13 Javascript