A-A+

thinkphp导出excel的完整实例

2018年11月07日 PHP开源系统 评论 2 条 阅读 0 views 次

最近在thinkphp 3.2.3 版本下做一个导出mysql数据到excel的功能,当然首先想到的是phpexcel了,在 thinkphp 3.2.3版本下,我们知道thinkphp启用了命名空间,而我直接使用了老版thinkphp中导出excel的代码,可是错误百出,老是出各种问题,然后从网上找了一个适合 thinkphp 3.2.3 导出excel的代码,简单修改一下,即可完美使用。

  1.    //导出 xlsx文件  
  2.     public function expUser(){  
  3.         // $p_name = $_POST['order_p_name'];  
  4.         $m = M ('ShopStatis');  
  5.         // $datas['order_p_name'] = $p_name;  
  6.         $data = $m->field('id,member_id,goods_name,goods_number,goods_price')->select();  
  7.         foreach ($data as $k => $v)  
  8.         {  
  9.             $data[$k]['order_time']=$v['order_time']=date('Y-m-d',$v['order_time']);  
  10.         }  
  11.         //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入  
  12.         Vendor("PHPExcel.PHPExcel"); //注意,如果PHPExcel类库放在Vendor下面的话,需要更改成为 Vendor 即可。  
  13.         $filename="test_excel";  
  14.         $headArr=array("编号","名称","价格","姓名","电话","日期");  
  15.         $this->getExcel($filename,$headArr,$data);  
  16.     }  
  17.       
  18.     private  function getExcel($fileName,$headArr,$data){  
  19.     //对数据进行检验  
  20.     if(emptyempty($data) || !is_array($data)){  
  21.         die("data must be a array");  
  22.     }  
  23.     //检查文件名  
  24.     if(emptyempty($fileName)){  
  25.         exit;  
  26.     }  
  27.     $date = date("Y_m_d",time());  
  28.     $fileName .= "_{$date}.xls";  
  29.     //创建PHPExcel对象,注意,不能少了\  
  30.       
  31.     $objPHPExcel = new \PHPExcel();  
  32.     $objProps = $objPHPExcel->getProperties();  
  33.   
  34.     //设置表头  
  35.     $key = ord("A");  
  36.     foreach($headArr as $v){  
  37.         $colum = chr($key);  
  38.         $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);  
  39.         $key += 1;  
  40.     }  
  41.     $column = 2;  
  42.     $objActSheet = $objPHPExcel->getActiveSheet();  
  43.     foreach($data as $key => $rows){ //行写入  
  44.         $span = ord("A");  
  45.         foreach($rows as $keyName=>$value){// 列写入  
  46.             $j = chr($span);  
  47.             $objActSheet->setCellValue($j.$column$value);  
  48.             $span++;  
  49.         }  
  50.         $column++;  
  51.     }  
  52.     $fileName = iconv("utf-8""gb2312"$fileName);  
  53.   
  54.     // $objPHPExcel->getActiveSheet()->setTitle('test');  
  55.     //设置活动单指数到第一个表,所以Excel打开这是第一个表  
  56.     $objPHPExcel->setActiveSheetIndex(0);  
  57.     ob_end_clean();  
  58.     ob_start();  
  59.     header('Content-Type: application/vnd.ms-excel');  
  60.     header("Content-Disposition: attachment;filename=\"$fileName\"");  
  61.     header('Cache-Control: max-age=0'); //www.xiariboke.net  
  62.     $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
  63.     $objWriter->save('php://output'); //文件通过浏览器下载  
  64.     exit;  
  65. }  

Thinkphp Vendor 位置:ThinkPHP/Library/Vendor

Thinkphp Org 位置:ThinkPHP/Library/Org

注意:我们在使用 Thinkphp导入或者导出 Excel 的时候,可能会出现如下的错误:

Class 'Admin\Controller\PHPExcel_IOFactory' not found

这种错误实际上很好理解,就是没有找到 PHPExcel_IOFactory 方法,出现这种错误多数是因为我们把网上较老thinkphp导入导出excel代码直接用在了新版的thinkphp中,在新版的thinkphp中使用了公共空间,所以需要在调用的类库方法的时候要加一个“\”,否则的话会找不到 PHPExcel 类库方法,比如以上代码中的 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); ,这里在 \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5') 前面加了一个 “\”,如果不加的话,就会出现上面提示的错误。

实例代码来源:https://www.cnblogs.com/HoverM/p/6210178.html

标签:

2 条留言  访客:2 条  博主:0 条

  1. 小说漫画

    感谢大神分享,赞一个

  2. LZY

    学习过一些PHP基础,但这个看不懂啊

给我留言