php實現導出excel功能


寫在前面:馬上面臨着畢業設計的系統檢查,為避免bug側漏,不斷的進行項目優化,目前在bug池中已經游走了一兩天了,重要的是自己在bug池游走的過程中還不忘記給自己增加新的功能,比如,我認為加一個批量的導出功能可以為畢業設計提分,omg,說一不二開始捯飭excel導出;

問題:如何自定義的導出,如何定義自己想要的模板呢?

1.首先下載phpExcel 文件 https://pan.baidu.com/s/1ITnaVJ1n6pujku3YgMc-7w  提取碼: nb4m  

2.解壓文件到php的vender的文件夾下面

3.進行編寫導出的代碼

  在cntroller中新建立一個文件(防止與其他的邏輯代碼混合)

public function clubpeople(){
//可以進行自定義傳值,比如一個id,去向數據庫找那個取出值 if(isset($_GET['club_id'])){ $clubid=$_GET['club_id']; } //獲取到get參數 //1.從數據庫中導出需要進行要導出的數據 $list =Db::query('SELECT stu_list.stu_name,stu_list.stu_department,stu_list.stu_phone,stu_list.stu_email,stu_list.stu_profess ,club_branch.* FROM club_branch INNER JOIN stu_list ON club_branch.stu_number = stu_list.stu_number where club_branch.club_id=:acc order by club_branch.club_branch_name ',['acc'=>$clubid]); //重要補助 //2.加載PHPExcle類庫 vendor('PHPExcel.PHPExcel'); //3.實例化PHPExcel類 $objPHPExcel = new \PHPExcel(); //4.激活當前的sheet表 $objPHPExcel->setActiveSheetIndex(0); //5.設置表格頭(即excel表格的第一行) $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '部門') ->setCellValue('B1', '職位') ->setCellValue('C1', '學號') ->setCellValue('D1', '學生姓名') ->setCellValue('E1', '聯系方式') ->setCellValue('F1', '郵箱') ->setCellValue('G1', '院系') ->setCellValue('H1', '專業'); //設置A列水平居中 $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //設置單元格寬度 //6.循環剛取出來的數組,將數據逐一添加到excel表格。 $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(10); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20); $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(30); for($i=0;$i<count($list);$i++){ $objPHPExcel->getActiveSheet()->setCellValue('A'.($i+2),$list[$i]['club_branch_name']);//ID $objPHPExcel->getActiveSheet()->setCellValue('B'.($i+2),$list[$i]['club_position']);//標簽碼 $objPHPExcel->getActiveSheet()->setCellValue('C'.($i+2),$list[$i]['stu_number']);//防偽碼 $objPHPExcel->getActiveSheet()->setCellValue('D'.($i+2),$list[$i]['stu_name']);//ID $objPHPExcel->getActiveSheet()->setCellValue('E'.($i+2),$list[$i]['stu_phone']);//標簽碼 $objPHPExcel->getActiveSheet()->setCellValue('F'.($i+2),$list[$i]['stu_email']);//ID $objPHPExcel->getActiveSheet()->setCellValue('G'.($i+2),$list[$i]['stu_department']);//標簽碼 $objPHPExcel->getActiveSheet()->setCellValue('H'.($i+2),$list[$i]['stu_profess']);//防偽碼 } //7.設置保存的Excel表格名稱 $filename = $club_name.'人員名單'.date('ymd',time()).'.xls'; //8.設置當前激活的sheet表格名稱; $objPHPExcel->getActiveSheet()->setTitle('人員名單'); //9.設置瀏覽器窗口下載表格 header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="'.$filename.'"'); //生成excel文件 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //下載文件在瀏覽器窗口 $objWriter->save('php://output'); exit; }

  這樣一個下載的表格就完成了,

2:如何進行解析表格存放在數據庫中呢

 public function getExcel(){ 
//首先要判斷當前是否與文件傳過來,並判斷文件傳輸是否正確 if(isset($_FILES["file"]) && ($_FILES["file"]["error"] == 0)){ $file = $_FILES['file']; $path = $file['tmp_name']; //讀取excel $arr = $this->excel($path, 0); $result =$arr;//用來記錄當前操作的錯誤之類的 //當解析完數據結構之后,就可以進行實地的插入數據庫操作了,此處省略掉這個部分~ $number = mt_rand(999, 9999);//隨機數返回前端,取名字 session('file'.$number ,$arg); //保存當前的一個報告結果數組,可以對報告進行下載 $resultr['status']=1; $resultr['msg']= $number; return json($resultr); }else{ $resultarr['status']=0; $resultarr['msg']='文件上傳發生錯誤,,稍后再試'; return json($resultarr); } }

  

public function excel($filePath='', $sheet=0){
                 
                  import("Org.Util.PHPExcel");
                  import("Org.Util.PHPExcel.Reader.Excel5");
                 import("Org.Util.PHPExcel.Reader.Excel2007");
         
                 if(empty($filePath) or !file_exists($filePath)){die('file not exists');}
                 $PHPReader = new \PHPExcel_Reader_Excel2007();        //建立reader對象
                 if(!$PHPReader->canRead($filePath)){
                     $PHPReader = new \PHPExcel_Reader_Excel5();
                    if(!$PHPReader->canRead($filePath)){
                          echo 'no Excel';
                        return ;
                      }
                 }
                 $PHPExcel = $PHPReader->load($filePath);        //建立excel對象
                 $currentSheet = $PHPExcel->getSheet($sheet);        //**讀取excel文件中的指定工作表*/
                $allColumn = $currentSheet->getHighestColumn();        //**取得最大的列號*/
                $allRow = $currentSheet->getHighestRow();        //**取得一共有多少行*/
                 $data = array();
                 for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){        //循環讀取每個單元格的內容。注意行從1開始,列從A開始
                     for($colIndex='A';$colIndex<=$allColumn;$colIndex++){
                         $addr = $colIndex.$rowIndex;
                         $cell = $currentSheet->getCell($addr)->getValue();
                         if($cell instanceof PHPExcel_RichText){ //富文本轉換字符串
                             $cell = $cell->__toString();
                         }
                         $data[$rowIndex][$colIndex] = $cell;
                     }
                 }
                 return $data;
             } 
            

  

omg~~三段代碼完成的功能分別是導出excel,還有就是上傳excel,然后可以進行解析,

畢業快樂

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM