thinkphp3.2.3结合PHPExcel导出数据库里所有表的结构

jerry thinkphp 2015年11月19日 收藏
前面已经做过了一个关于这方面的demo,但没有对excel进行格式设置,用户体验不友好,这次做了改正,希望在项目开发的时候,大家能用得上.
按惯例,先上图


代码如下:
  1.   public function out(){    
  2.         //读取库里所有的表            
  3.         $sql="show tables";   
  4.         $result=M()->query($sql);  
  5.         foreach ($result as $k=>$v) {             
  6.             $k++;                     
  7.             $_sql="SHOW FULL COLUMNS FROM ".$v['tables_in_'.C('DB_NAME')]; 
  8.             $data[][0]=array("表 {$k}.".$v['tables_in_'.C('DB_NAME')]."表",'','','','','','');
  9.             $data[][1]=array("字段","类型","校对","NULL","键","默认","额外","权限","注释");
  10.             $data[]=M()->query($_sql);  

  11.             $data[][]=array();                      
  12.         }          
  13.         //导入PHPExcel类库         
  14.         import("Common.Org.PHPExcel");        
  15.         import("Common.Org.PHPExcel.Writer.Excel5");         
  16.         import("Common.Org.PHPExcel.IOFactory.php");         
  17.         $filename="test_excel";              
  18.         $this->getExcel($filename,$data);    
  19.     }  

  20.     private function getExcel($fileName,$data){             
  21.     //对数据进行检验            
  22.          if(empty($data)||!is_array($data)){                 
  23.              die("data must be a array");             
  24.          }             
  25.         $date=date("Y_m_d",time()); 
  26.         $fileName.="_{$date}.xls";              
  27.         //创建PHPExcel对象,注意,不能少了\             
  28.         $objPHPExcel=new \PHPExcel();             
  29.         $objProps=$objPHPExcel->getProperties();  

  30.         $column=2;             
  31.         $objActSheet=$objPHPExcel->getActiveSheet();   
  32.         $objPHPExcel->getActiveSheet()->getStyle()->getFont()->setName('微软雅黑');//设置字体
  33.         $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(25);//设置默认高度

  34.         $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth('5');//设置列宽
  35.         $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth('22');//设置列宽
  36.         $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth('22');//设置列宽
  37.         $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth('40');//设置列宽

  38.         //设置边框
  39.         $sharedStyle1=new \PHPExcel_Style();
  40.         $sharedStyle1->applyFromArray(array('borders'=>array('allborders'=>array('style'=>\PHPExcel_Style_Border::BORDER_THIN))));
  41.         
  42.         foreach ($data as $ke=>$row){      

  43.             foreach($row as $key=>$rows){

  44.                 if(count($row)==1&&empty($row[0][1])&&empty($rows[1])&&!empty($rows)){

  45.                     $objPHPExcel->getActiveSheet()->setSharedStyle($sharedStyle1, "A{$column}:J{$column}");//设置边框
  46.                     array_unshift($rows,$rows['0']);
  47.                     $objPHPExcel->getActiveSheet()->mergeCells("A{$column}:J{$column}");//合并单元格
  48.                     $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getFont()->setSize(12);//字体
  49.                     $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getFont()->setBold(true);//粗体

  50.                     //背景色填充
  51.                     $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
  52.                     $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getFill()->getStartColor()->setARGB('FFB8CCE4');

  53.                 }else{
  54.                     if(!empty($rows)){
  55.                         array_unshift($rows,$key+1);
  56.                         $objPHPExcel->getActiveSheet()->setSharedStyle($sharedStyle1,"A{$column}:J{$column}");//设置边框
  57.                     } 
  58.                 }

  59.                 if($rows['1']=='字段'){
  60.                     $rows[0]='ID';
  61.                     //背景色填充
  62.                     $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
  63.                     $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getFill()->getStartColor()->setARGB('FF4F81BD');
  64.                 }

  65.                 $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
  66.                 $objPHPExcel->getActiveSheet()->getStyle("A{$column}:J{$column}")->getAlignment()->setWrapText(true);//换行
  67.                  //行写入                     
  68.                 $span = ord("A");                       
  69.                 foreach($rows as $keyName=>$value){                    
  70.                     // 列写入                       
  71.                     $j=chr($span);                         
  72.                     $objActSheet->setCellValue($j.$column, $value);                        
  73.                     $span++;                     
  74.                 }                     
  75.                 $column++;                 
  76.             }             
  77.         } 
  78.         $fileName = iconv("utf-8", "gb2312", $fileName);             
  79.         //设置活动单指数到第一个表,所以Excel打开这是第一个表             
  80.         $objPHPExcel->setActiveSheetIndex(0);             
  81.         header('Content-Type: application/vnd.ms-excel');             
  82.         header("Content-Disposition: attachment;filename=\"$fileName\"");             
  83.         header('Cache-Control: max-age=0');                
  84.         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');             
  85.         $objWriter->save('php://output'); //文件通过浏览器下载             
  86.         exit;     
  87.     }
PHPExcel插件放在应用目录下的Common模块下的Org文件夹里,附带附件,大家可以下载,大家也可以改进,希望能把改进后的分享出来!

附件tp323-PHPExcel.zip ( 1.91 MB 下载:492 次 )