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学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
php PDO中文乱码解决办法
Jul 20 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
php修改时间格式的代码
May 29 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
Nov 19 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
Yii2中datetime类的使用
Dec 17 PHP
详解PHP中mb_strpos的使用
Feb 04 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 ADODB使用方法集锦
2008/03/25 PHP
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
python的setattr函数实例用法
2020/12/16 Python
python中remove函数的踩坑记录
2021/01/04 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
2014年底工作总结
2014/12/15 职场文书
2015年植树节活动总结
2015/02/06 职场文书
博士给导师的自荐信
2015/03/06 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技