使用PHPExcel實現資料批量匯出為excel表格的方法(必看)
阿新 • • 發佈:2018-12-14
/** * 批量匯出資料 * @param $arr 從資料庫查詢出來,即要匯出的資料 * $name excel表歌名 */ function expExcel($arr,$name){ //require_once 'PHPExcel.php'; Vendor('PHPExcel.PHPExcel'); Vendor('PHPExcel.Autoloader'); //例項化 $objPHPExcel = new \PHPExcel(); /*右鍵屬性所顯示的資訊*/ $objPHPExcel->getProperties()->setCreator("zxf") //作者 ->setLastModifiedBy("zxf") //最後一次儲存者 ->setTitle('資料EXCEL匯出') //標題 ->setSubject('資料EXCEL匯出') //主題 ->setDescription('匯出資料') //描述 ->setKeywords("excel") //標記 ->setCategory("result file"); //類別 //設定當前的表格 $objPHPExcel->setActiveSheetIndex(0); // 設定表格第一行顯示內容 $objPHPExcel->getActiveSheet() ->setCellValue('A1', '產品id') ->setCellValue('B1', '報價id') ->setCellValue('C1', '庫存') ->setCellValue('D1', '供應商') //設定第一行為紅色字型 ->getStyle('A1:D1')->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_RED); $key = 1; /*以下就是對處理Excel裡的資料,橫著取資料*/ foreach($arr as $v){ //設定迴圈從第二行開始 $key++; $objPHPExcel->getActiveSheet() //Excel的第A列,name是你查出陣列的鍵值欄位,下面以此類推 ->setCellValue('A'.$key, $v['procode']) ->setCellValue('B'.$key, $v['bjid']) ->setCellValue('C'.$key, $v['realkucun']) ->setCellValue('D'.$key, $v['supplier']); } //設定當前的表格 $objPHPExcel->setActiveSheetIndex(0); ob_end_clean(); //清除緩衝區,避免亂碼 header('Content-Type: application/vnd.ms-excel'); //檔案型別 header('Content-Disposition: attachment;filename="'.$name.'.xls"'); //檔名 header('Cache-Control: max-age=0'); header('Content-Type: text/html; charset=utf-8'); //編碼 //解決報錯的問題:Class 'Warehouse\Controller\PHPExcel_IOFactory' not found //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//原始路徑 //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel 2003 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//新路徑 $objWriter->save('php://output'); exit; }
/***********呼叫**********************/ header("Content-type:text/html;charset=utf-8"); //連結資料庫 $link = @mysql_connect('localhost','root','') or die('連線資料庫失敗'); mysql_select_db('test',$link); mysql_query('set names utf8'); //先獲取資料 $sql = "select * from house"; $res = mysql_query($sql); $arr = array(); //把$res=>$arr,把結果集內容轉移到一個數組中 while ($row = mysql_fetch_assoc($res)){ $arr[] = $row; } //excel表格名 $name = "使用者表"; //呼叫 expExcel($arr,$name)
ps:
// 匯出檔案 function Manage_exportfile($fields,$data,$name){ Vendor('PHPExcel.PHPExcel'); Vendor('PHPExcel.Autoloader'); $file_name = $name.'_'.uniqid(); // 首先建立一個新的物件 PHPExcel object $objPHPExcel = new \PHPExcel(); // 設定檔案的一些屬性,在xls檔案——>屬性——>詳細資訊裡可以看到這些值,xml表格裡是沒有這些值的 $objPHPExcel ->getProperties() //獲得檔案屬性物件,給下文提供設定資源 ->setCreator( "Itsean") //設定檔案的建立者 ->setLastModifiedBy( "Itsean") //設定最後修改者 ->setTitle($name) //設定標題 ->setSubject($name) //設定主題 ->setDescription(iconv('utf-8', 'gb2312', "The File Great By Xvdesign.Com !The Site:http://www.xvdesign.com/")) //設定備註 ->setKeywords($name.' Itsean') //設定標記 ->setCategory($name.' Itsean'); //設定類別 // 位置aaa *為下文程式碼位置提供錨 // 給表格新增資料 $objActSheet = $objPHPExcel->setActiveSheetIndex(0); //設定第一個內建表(一個xls檔案裡可以有多個表)為活動的 $excel_col = 'A'; $excel_row = 1; //dump($data);die; //dump($fields);die; foreach ($fields as $key => $field) { $objActSheet->setCellValue($excel_col.$excel_row, $field[1]); if($field[2]){ $objActSheet->getColumnDimension($excel_col) -> setWidth($field[2]/10); } //$objActSheet->getStyle($excel_col.$excel_row)->getAlignment()->setHorizontal('center'); $objActSheet->getStyle($excel_col.$excel_row)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle($excel_col.$excel_row)->getFill()->getStartColor()->setARGB('ffcccccc'); //$objActSheet->getColumnDimension($excel_col)->setWidth(20); $objActSheet->getStyle($excel_col.$excel_row)->getAlignment()->setHorizontal('left'); //$objActSheet->getStyle('B'.$excel_row)->getAlignment()->setHorizontal('left'); //$objActSheet->getStyle('E'.$excel_row)->getAlignment()->setHorizontal('left'); $excel_col++; } //設定寬度 $objActSheet->getColumnDimension('C')->setWidth(30); $objActSheet->getColumnDimension('D')->setWidth(30); $objActSheet->getColumnDimension('F')->setWidth(15); $objActSheet->getColumnDimension('G')->setWidth(50); //dump($objActSheet);die; $excel_row++; foreach ($data as $k => $v) { $excel_col = 'A'; foreach ($fields as $key => $field) { /*$objActSheet->getStyle('A'.$excel_row)->getAlignment()->setHorizontal('left'); $objActSheet->getStyle('B'.$excel_row)->getAlignment()->setHorizontal('left'); $objActSheet->getStyle('E'.$excel_row)->getAlignment()->setHorizontal('left');*/ $objActSheet->setCellValue( $excel_col.$excel_row, $v[$field[0]]); //設定換行 //$objActSheet->getStyle($excel_col)->getAlignment()->setWrapText(true); $excel_col++; } $excel_row++; } $objDrawing = new \PHPExcel_Worksheet_Drawing(); $objDrawing->setName('Paid'); $objDrawing->setDescription('Paid'); // $objDrawing->setPath('./Public/Images/login/loginlogo.png'); //圖片引入位置 // $objDrawing->setCoordinates('A'.$excel_row); //圖片新增位置 $objDrawing->setOffsetX(10); $objDrawing->setRotation(0); $objDrawing->setHeight(100); $objDrawing->getShadow()->setVisible (true); $objDrawing->getShadow()->setDirection(20); $objDrawing->setWorksheet($objActSheet); //得到當前活動的表,注意下文教程中會經常用到$objActSheet // $objActSheet = $objPHPExcel->getActiveSheet(); // 位置bbb *為下文程式碼位置提供錨 // 給當前活動的表設定名稱 $objActSheet->setTitle($name); // 生成2003excel格式的xls檔案 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$file_name.'.xls"'); header('Cache-Control: max-age=0'); //解決報錯的問題:Class 'Warehouse\Controller\PHPExcel_IOFactory' not found //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//原始路徑 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//新路徑 // 生成2007excel格式的xlsx檔案 // header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // header('Content-Disposition: attachment;filename="'.$name.'.xlsx"'); // header('Cache-Control: max-age=0'); // $objWriter = \PHPExcel_IOFactory:: createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; }