1. 程式人生 > >thinkphp5 整合phpexcel匯入和匯出資料

thinkphp5 整合phpexcel匯入和匯出資料

<?php namespace app\index\controller; use think\Controller; use think\Db; class Index extends Controller{         public function index(){                         return $this->fetch();         }         //匯入         public function inserExcel(){              import('PHPExcel.PHPExcel');              import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');              import('PHPExcel.PHPExcel.Reader.Excel5');              //獲取表單上傳檔案              $file = request()->file('excel');              $info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');              if ($info) {                 if(empty($info)) {                     return error('匯入失敗!');                 }                 $exclePath = $info->getSaveName();  //獲取檔名                 //上傳檔案的地址                 $filename = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath;                    //判斷版本,這裡有的網上的版本沒有進行判斷,導致會報大概這樣的錯誤:                 //Warning: ZipArchive::getFromName() [ziparchive.getfromname]: Invalid or unitialized ,這裡加上這個判斷就可以了                 $extension = strtolower( pathinfo($filename, PATHINFO_EXTENSION) );                 if($extension == 'xlsx') {                     $objReader =\PHPExcel_IOFactory::createReader('Excel2007');                     //載入檔案內容,編碼utf-8                     $objPHPExcel = $objReader->load($filename, $encode = 'utf-8');                 }else if($extension == 'xls'){                     $objReader =\PHPExcel_IOFactory::createReader('Excel5');                     $objPHPExcel = $objReader->load($filename, $encode = 'utf-8');                 }else{                     return error('請上傳excel格式的檔案!');                 }                 $excel_array=$objPHPExcel->getsheet(0)->toArray();   //轉換為陣列格式                 array_shift($excel_array);  //刪除第一個陣列(標題);                 $data = [];                 foreach($excel_array as $k=>$v) {                 //data陣列根據你表字段自行修改,這裡Excel檔案裡的欄位要跟表一致                     $data[$k]['name'] = $v[0];                     $data[$k]['pid'] = 1;                     $data[$k]['type'] = $v[2];                     $data[$k]['price'] = $v[3];                     $data[$k]['standard'] = $v[4];                     $data[$k]['unit'] = $v[5];                     $data[$k]['supplier'] = $v[6];                     $data[$k]['lowstock'] = $v[7];                     $data[$k]['topstock'] = $v[8];                     $data[$k]['stock'] = $v[9];                     $data[$k]['operator'] = $v[10];                 }                 echo "<pre>";                 print_r($data);                 echo "</pre>";                 exit();             } else {                return error('匯入失敗!');             }

        }         //匯出         function export(){//匯出Excel             import('PHPExcel.PHPExcel');//呼叫類庫,路徑是基於vendor資料夾的             import('PHPExcel.PHPExcel.Worksheet.Drawing');             import('PHPExcel.PHPExcel.Writer.Excel2007');             $xlsName  = "export";             $xlsCell  = array(                 array('uid','賬號序列'),                 array('user_name','名字'),                 array('email','郵箱'),             );             $xlsData  = Db::name('member')->Field('uid,user_name,email')->select();             $this->exportExcel($xlsName,$xlsCell,$xlsData);         }         function exportExcel($expTitle,$expCellName,$expTableData){             //include_once EXTEND_PATH.'PHPExcel/PHPExcel.php';//方法二             $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//檔名稱             $fileName = $expTitle.date('_YmdHis');//or $xlsTitle 檔名稱可根據自己情況設定             $cellNum = count($expCellName);             $dataNum = count($expTableData);             $objPHPExcel = new \PHPExcel();//方法一             //$objPHPExcel = new \PHPExcel();//方法二             $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U',                 'V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO',                 'AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');             $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合併單元格             $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.'  Export time:'.date('Y-m-d H:i:s'));             for($i=0;$i<$cellNum;$i++){                 $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);             }             // Miscellaneous glyphs, UTF-8             for($i=0;$i<$dataNum;$i++){                 for($j=0;$j<$cellNum;$j++){                     $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);                 }             }             ob_end_clean();//這一步非常關鍵,用來清除緩衝區防止匯出的excel亂碼             header('pragma:public');             header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');             header("Content-Disposition:attachment;filename=$fileName.xls");//"xls"參考下一條備註             $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//"Excel2007"生成2007版本的xlsx,"Excel5"生成2003版本的xls             $objWriter->save('php://output');             exit;         }          } ?>