分享

thinkphp之Excel的导出

 学海无涯GL 2015-05-28

Excel的导出步骤:

1.下载phpexcel包,置于以下thinkphp框架路径。


内部还有一个文件夹和一个php文件


2.创建excel对象并设置excel对象的属性(ExportALLAction.class.php );

3.设置excel的行列样式(字体、高宽、颜色、边框、合并等)

4.绘制报表表头

5.将查询数据写入excel

6.设置excel的sheet的名称<

7.设置excel报表打开后初始的sheet

8.设置输出的excel的头参数及文件名

9.调用创建excel的方法生成excel文件

前端代码(可以用form表单提交,本例子用js跳转,只要能调到控制层函数就行):

  1. <pre name="code" class="html"><div class="main">  
  2.     <p class="currentPosition"><a href="#">搜索</a>>业务员>A类</p>  
  3.     <p class="aButton"><span><input  type="button" value="导出" name="download" onclick="exportdata()"/></span></p>  
  4.     <div>  
  5.         <div >  
  6.             <table>  
  7.                 <thead>  
  8.                     <tr>  
  9.                     <th style="border:1px solid #DDD" > 序号</th>  
  10.                     <th style="border:1px solid #DDD" > 姓名</th>  
  11.                     <th style="border:1px solid #DDD" > 电话</th>  
  12.                     <th style="border:1px solid #DDD" > 备注</th>  
  13.                     </tr>  
  14.                 </thead>  
  15.                 <tbody>  
  16.                     <volist name="data"  id="vo" key="k">  
  17.                         <tr style="line-height:1.5em">  
  18.                             <td style="border:1px solid #DDD" ><{$k}></td>  
  19.                             <td style="border:1px solid #DDD"><{$vo.clientname}></td>  
  20.                             <td style="border:1px solid #DDD" ><{$vo.phone}></td>  
  21.                             <td style="border:1px solid #DDD" ><{$vo.remark}></td>  
  22.                          </tr>  
  23.                         <tr><tr>  
  24.                     </volist>  
  25.                 </tbody>  
  26.             </table>  
  27.         </div>  
  28.     </div>  
  29. </div>  
  30.   
  31. <script language="javascript" type="text/javascript">  
  32.    function exportdata(){  
  33.      window.location.href="__APP__/Admin/ExportALL/index/name/saler/type/A";   
  34.    }         
  35.  </script>  




控制层代码(前面部分是查数据,可以忽略,注意:ob_end_clean();//清除缓冲区,避免乱码)

  1. <?php  
  2. class ExportALLAction extends Action {    
  3.     public function index(){    
  4.         $name=$_GET['name'];  
  5.         $type=$_GET['type'];  
  6.         switch($name){  
  7.             case 'agent':{  
  8.                 switch($type){  
  9.                     case 'A':$data=M('agentclient')->where(array('type'=>1))->select();$filename="代理商A类";break;  
  10.                     case 'B':$data=M('agentclient')->where(array('type'=>2))->select();$filename="代理商B类";break;  
  11.                     case 'C':$data=M('agentclient')->where(array('type'=>3))->select();$filename="代理商C类";break;  
  12.                     case 'D':$data=M('agentclient')->where(array('type'=>4))->select();$filename="代理商D类";break;  
  13.                     case 'collect':$data=M('agentclient')->where(array('type'=>5))->select();$filename="代理商收藏";break;  
  14.                     case 'black':$data=M('agentclient')->where(array('type'=>6))->select();$filename="代理商黑名单";break;  
  15.                     default:break;  
  16.                 }  
  17.             }break;  
  18.             case 'manager':{  
  19.                 switch($type){  
  20.                     case 'A':$data=M('managerclient')->where(array('type'=>1))->select();$filename="销售经理A类";break;  
  21.                     case 'B':$data=M('managerclient')->where(array('type'=>2))->select();$filename="销售经理B类";break;  
  22.                     case 'C':$data=M('managerclient')->where(array('type'=>3))->select();$filename="销售经理C类";break;  
  23.                     case 'D':$data=M('managerclient')->where(array('type'=>4))->select();$filename="销售经理D类";break;  
  24.                     case 'collect':$data=M('managerclient')->where(array('type'=>5))->select();$filename="销售经理收藏";break;  
  25.                     case 'black':$data=M('managerclient')->where(array('type'=>6))->select();$filename="销售经理黑名单";break;  
  26.                     default:break;  
  27.                 }  
  28.             }break;  
  29.             case 'saler':{  
  30.                 switch($type){  
  31.                     case 'A':$data=M('salerclient')->where(array('type'=>1))->select();$filename="业务员A类";break;  
  32.                     case 'B':$data=M('salerclient')->where(array('type'=>2))->select();$filename="业务员B类";break;  
  33.                     case 'C':$data=M('salerclient')->where(array('type'=>3))->select();$filename="业务员C类";break;  
  34.                     case 'D':$data=M('salerclient')->where(array('type'=>4))->select();$filename="业务员D类";break;  
  35.                     case 'collect':$data=M('salerclient')->where(array('type'=>5))->select();$filename="业务员收藏";break;  
  36.                     case 'black':$data=M('salerclient')->where(array('type'=>6))->select();$filename="业务员黑名单";break;  
  37.                     default:break;  
  38.                 }  
  39.             }break;  
  40.             default:break;  
  41.           
  42.         }  
  43.         //P($data);  
  44.         //exit;  
  45.         $OrdersData=$data;  
  46.         if(!$OrdersData){  
  47.             echo"<h1 align='center'>没有数据</h1>";  
  48.             return;  
  49.         }  
  50.     //  P($OrdersData);  
  51.     //  exit;  
  52.         Vendor('PHPExcel.PHPExcel');  
  53.         Vendor('PHPExcel.PHPExcel.IOFactory');  
  54.         Vendor('PHPExcel.PHPExcel.Reader.Excel5');  
  55.         // Create new PHPExcel object    
  56.         $objPHPExcel = new PHPExcel();    
  57.         // Set properties    
  58.         $objPHPExcel->getProperties()->setCreator("ctos")    
  59.             ->setLastModifiedBy("ctos")    
  60.             ->setTitle("Office 2007 XLSX Test Document")    
  61.             ->setSubject("Office 2007 XLSX Test Document")    
  62.             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")    
  63.             ->setKeywords("office 2007 openxml php")    
  64.             ->setCategory("Test result file");    
  65.     
  66.         //set width    
  67.         $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);    
  68.         $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);    
  69.         $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);    
  70.         $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);    
  71.     
  72.   
  73.         //设置行高度    
  74.         $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);    
  75.     
  76.         $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);    
  77.     
  78.         //set font size bold    
  79.         $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);    
  80.         $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getFont()->setBold(true);    
  81.     
  82.         $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);    
  83.         $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);    
  84.     
  85.         //设置水平居中    
  86.         $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);    
  87.         $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);    
  88.         $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);    
  89.         $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);   
  90.         $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);    
  91.   
  92.   
  93.         //    
  94.         $objPHPExcel->getActiveSheet()->mergeCells('A1:N1');    
  95.     
  96.         // set table header content    
  97.         $objPHPExcel->setActiveSheetIndex(0)    
  98.             ->setCellValue('A1', $filename.'记录  时间:'.date('Y-m-d H:i:s'))    
  99.             ->setCellValue('A2', '编号')   
  100.             ->setCellValue('B2', '姓名')    
  101.             ->setCellValue('C2', '电话')    
  102.             ->setCellValue('D2', '备注') ;  
  103.         // Miscellaneous glyphs, UTF-8    
  104.         for($i=0;$i<=count($OrdersData)-1;$i++){    
  105.             $objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $i+1);    
  106.             $objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $OrdersData[$i]['clientname']);    
  107.             $objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $OrdersData[$i]['phone']);    
  108.             $objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), $OrdersData[$i]['remark']);     
  109.             $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':D'.($i+3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);    
  110.             $objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':D'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);    
  111.             $objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);    
  112.               
  113.         }     
  114.         // Rename sheet    
  115.         $objPHPExcel->getActiveSheet()->setTitle($filename.'记录');    
  116.     
  117.     
  118.         // Set active sheet index to the first sheet, so Excel opens this as the first sheet    
  119.         $objPHPExcel->setActiveSheetIndex(0);    
  120.     
  121.     ob_end_clean();//清除缓冲区,避免乱码  
  122.         // Redirect output to a client’s web browser (Excel5)    
  123.         header('Content-Type: application/vnd.ms-excel');    
  124.         $filenames=$filename.'('.date('Ymd-His').').xls';  
  125.         header("Content-Disposition: attachment;filename={$filenames}");    
  126.         header('Cache-Control: max-age=0');    
  127.     
  128.         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');    
  129.         $objWriter->save('php://output');    
  130.     
  131.     }    
  132. }    
参考例程:http://blog.csdn.net/jimlong/article/details/8606005

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约