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 has encountered an Access Violation
Jan 15 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
php自定义apk安装包实例
Oct 20 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 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中使用smarty生成静态文件的例子
2014/04/24 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
python数据结构之链表的实例讲解
2017/07/25 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
python Tkinter版学生管理系统
2019/02/20 Python
python编写简单端口扫描器
2019/09/04 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
建筑行业的大学生自我评价
2013/12/08 职场文书
狼和鹿教学反思
2014/02/05 职场文书
原材料检验岗位职责
2014/03/15 职场文书
大二学生自我检讨书
2014/10/23 职场文书
个人工作保证书
2015/02/28 职场文书
员工辞职信范文
2015/03/02 职场文书
停课通知书
2015/04/24 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
汽车车尾标语大全
2015/08/11 职场文书
初中数学教学反思范文
2016/02/17 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android