yii2 excel 匯出 (圖片加設定寬高水平垂直居中)
阿新 • • 發佈:2018-11-28
composer require "phpoffice/phpexcel" 用這個命令下載就可以(等一會時間),前提是你已經安裝的composer 如果沒有,就安裝一個,就不多說了。
安裝完成後 window 下開啟命令視窗 輸入compposer 檢視是否安裝成功,然後開啟你的yii2.0(高階版)框架的verdor 這個資料夾 Shift+右鍵,開啟命令視窗,執行上面那個下載命令他就會自動下載並配置好了。 如果出現phpoffice這個資料夾就對了(裡面有PHPExcel 這個檔案)。
然後在Controller裡面引入 use \PHPExcel; 記得要加“\”哦。 然後在方法裡實例化就可以了,在具體的excel方法前面也要加‘\’不然會報錯。
最後就是匯出了, 這個比較簡單 這 只是一個簡單的例子
/** * 匯出excel */ public function actionExcel() { $time = date('Y-m-d H-i-s', time()); $names = $time . '裝置資料' . '.xls'; $objPHPExcel = new \PHPExcel(); $query = new \yii\db\Query(); $query = $query->select("t1.*, t2.series_name, t2.series_model, t2.series_rows") ->from(['t1' => 'ss_equipment']) ->leftJoin(['t2' => 'ss_series'], "t1.series_id = t2.id") ->where(1); $list = $query->all(); /*以下就是對處理Excel裡的資料, 橫著取資料,主要是這一步,其他基本都不要改*/ foreach($list as $k=>$v) { $num= $k+1; $objPHPExcel->setActiveSheetIndex(0) //Excel的第A列,uid是你查出陣列的鍵值,下面以此類推 ->setCellValue('A'.$num, $v['id']) ->setCellValue('B'.$num, $v['series_id']) ->setCellValue('C'.$num, $v['serial_number']) ->setCellValue('D'.$num, $v['series_name']) ->setCellValue('E'.$num, $v['series_model']) ->setCellValue('F'.$num, $v['series_rows']) ->setCellValue('G'.$num, $v['status']) ->setCellValue('H'.$num, $v['created']) ->setCellValue('I'.$num, $v['updated']); } $objPHPExcel->getActiveSheet()->setTitle('User'); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $names . '"'); //excel表格名稱 header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); return $this->returnData('', 1, '匯出成功'); }
上面是快速匯出,下面是(圖片加設定寬高水平垂直居中)
/** * 匯出excel */ public static function actionExcel($equipment_numbers = "") { //設定檔名稱 $time = date('Y-m-d H-i-s', time()); $names = $time . '新增裝置規則資料' . '.xls'; $query = new \yii\db\Query(); $query = $query->select("t1.*, t2.series_name, t2.series_model, t2.series_rows") ->from(['t1' => 'ss_equipment']) ->leftJoin(['t2' => 'ss_series'], "t1.series_id = t2.id") ->where(1); if($equipment_numbers != null){ $query ->andWhere(['in','serial_number',$equipment_numbers]); } $list = $query->all(); // 匯出Exl $objPHPExcel = new \PHPExcel(); $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel); $objActSheet = $objPHPExcel->getActiveSheet(); // 水平居中(位置很重要,建議在最初始位置) $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->setActiveSheetIndex(0)->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objActSheet->setCellValue('A1', 'id'); $objActSheet->setCellValue('B1', '裝置id'); $objActSheet->setCellValue('C1', '裝置號'); $objActSheet->setCellValue('D1', '系列名稱'); $objActSheet->setCellValue('E1', '裝置型號'); $objActSheet->setCellValue('F1', '排數'); $objActSheet->setCellValue('G1', '狀態'); $objActSheet->setCellValue('H1', '建立時間'); $objActSheet->setCellValue('I1', '更新時間'); $objActSheet->setCellValue('J1', '圖片地址'); // 設定個表格寬度 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(80); // 垂直居中 $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('J')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); /*以下就是對處理Excel裡的資料, 橫著取資料,主要是這一步,其他基本都不要改*/ foreach ($list as $k => $v) { $k +=2; $v['created'] = isset($v['created']) ?$v['created'] :""; $v['created'] = date('Y-m-d h:i:s',$v['created']); $v['updated'] = isset($v['updated']) ?$v['updated'] :""; $v['updated'] = date('Y-m-d h:i:s',$v['updated']); $objActSheet->setCellValue('A'.$k, $v['id']); $objActSheet->setCellValue('B'.$k, $v['series_id']); $objActSheet->setCellValue('C'.$k, $v['serial_number']); $objActSheet->setCellValue('D'.$k, $v['series_name']); $objActSheet->setCellValue('E'.$k, $v['series_model']); $objActSheet->setCellValue('F'.$k, $v['series_rows']); $objActSheet->setCellValue('G'.$k, $v['status']); $objActSheet->setCellValue('H'.$k, $v['created']); $objActSheet->setCellValue('I'.$k, $v['updated']); $objActSheet->setCellValue('J'.$k); // 圖片生成 $img=new \PHPExcel_Worksheet_Drawing(); $img->setPath(ROOT_DIR.$v['img']);//寫入圖片路徑 // 設定寬度高度 $img->setHeight(80);//照片高度 $img->setWidth(80); //照片寬度 /*設定圖片要插入的單元格*/ $img->setCoordinates('J'.$k); // 圖片偏移距離 $img->setOffsetX(12); $img->setOffsetY(12); $img->setWorksheet($objPHPExcel->getActiveSheet()); // 表格高度 $objActSheet->getRowDimension($k)->setRowHeight(80); } //設定活動單指數到第一個表,所以Excel開啟這是第一個表 $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $names . '"'); //excel表格名稱 header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output');//檔案通過瀏覽器下載 }