PHP 导出excel合并相同数据单元格
生活随笔
收集整理的這篇文章主要介紹了
PHP 导出excel合并相同数据单元格
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//把要導出的數據相同的分組組成一個三維數組
$expTableData //準備的導出數據
$res = array();
foreach($expTableData as &$val){$res[$val]['分組key'][] = $val;
}
//計算單元格合并的長度
foreach (array_values($res) as $k=>$v) {if ($k == 0) {$num1 = 3;$num2 = $num1+count($v)-1;}else {$num1 = $num2+1;$num2 = $num1+count($v)-1;}echo $num1.'-'.$num2;$objActSheet->mergeCells('A'.$num1.':A'.$num2);//合并單元格$objActSheet->mergeCells('B'.$num1.':B'.$num2);//合并單元格$objActSheet->mergeCells('C'.$num1.':C'.$num2);//合并單元格$objActSheet->mergeCells('D'.$num1.':D'.$num2);//合并單元格 } 完整代碼 public function exportExcel_1($expTitle, $expCellName, $expTableData, $expColor = [], $fixed = 0, $title = null, $othTitle = []) {// $expTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名稱$fileName = $expTitle.date('_YmdHis');//or $xlsTitle 文件名稱可根據自己情況設定$cellNum = count($expCellName);$dataNum = count($expTableData);vendor('PHPExcel.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');// echo $cellNum . '==' . $dataNum;die;/* 設置當前的sheet */$objActSheetIndex = $objPHPExcel->setActiveSheetIndex(0);$objActSheet = $objPHPExcel->getActiveSheet(0);/* sheet標題 */$objActSheet->setTitle($expTitle);$ascii = 65;$cv = '';if ($title) {$objActSheetIndex->setCellValue('A1', $expTitle);} else {$objActSheetIndex->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));}$i = 2;if ($othTitle) {foreach($othTitle as $val) {$ascii = 65;foreach ($val as $k=>$one) {$objActSheet->setCellValue($cv.chr($ascii). $i, $one);if ($k == 1) {$objActSheet->mergeCells($cv.chr($ascii).$i.':'.$cellName[$cellNum-1]. $i);}$ascii++;if($ascii == 91){$ascii = 65;$cv .= chr(strlen($cv)+65);}}$i++;}}$ascii = 65;foreach($expCellName as $key => $field){$objActSheet->setCellValue($cv.chr($ascii). $i, $field[1]);$ascii++;if($ascii == 91){$ascii = 65;$cv .= chr(strlen($cv)+65);}}$ascii = 65;$cv = '';$i ++;$width = [];$res = array();foreach($expTableData as &$val){$res[$val['xzbIds']][]= $val;foreach($expCellName as $field){// if ($fixed) {// $tmpLen = mb_strlen($field[1]);// if ($tmpLen > 20 ) {var_dump($field);die;// // $objActSheet->getColumnDimension($cv.chr($ascii))->setAutoSize(true);// $objActSheet->getColumnDimension($cv.chr($ascii))->setWidth(mb_strlen($field[1]));// if (isset($width[$cv.chr($ascii)])) {// $width[$cv.chr($ascii)] = $width[$cv.chr($ascii)] > $tmpLen ? $width[$cv.chr($ascii)] : $tmpLen;// } else {// $width[$cv.chr($ascii)] = $tmpLen;// }// } else {// $objActSheet->getColumnDimension($cv.chr($ascii))->setWidth('15');// }// } else {// $objActSheet->getColumnDimension($cv.chr($ascii))->setWidth('15');// }$objActSheet->getColumnDimension($cv.chr($ascii))->setWidth('15');if(isset($field[2])) {switch ($field[2]) {//防止使用科學計數法,在數據前加空格case 'longNumber':$objActSheet->setCellValue($cv.chr($ascii).$i, ' '.$val[$field[0]]);break;case 'datetime':$objActSheet->setCellValue($cv.chr($ascii).$i, date('Y-m-d',$val[$field[0]]));break;default:$objActSheet->setCellValue($cv.chr($ascii).$i, $val[$field[0]]);break;}} else {$objActSheet->setCellValue($cv.chr($ascii).$i, $val[$field[0]]);}$ascii++;if($ascii == 91){$ascii = 65;$cv .= chr(strlen($cv)+65);}}$ascii = 65;$cv = '';$i++;}$num2 = 0;foreach (array_values($res) as $k=>$v) {if ($k == 0) {$num1 = 3;$num2 = $num1+count($v)-1;}else {$num1 = $num2+1;$num2 = $num1+count($v)-1;}echo $num1.'-'.$num2;$objActSheet->mergeCells('A'.$num1.':A'.$num2);//合并單元格$objActSheet->mergeCells('B'.$num1.':B'.$num2);//合并單元格$objActSheet->mergeCells('C'.$num1.':C'.$num2);//合并單元格$objActSheet->mergeCells('D'.$num1.':D'.$num2);//合并單元格}/* 生成到瀏覽器,提供下載 */ob_end_clean(); //清空緩存header("Pragma: public");header("Expires: 0");//header("Cache-Control:must-revalidate,post-check=0,pre-check=0");//header("Content-Type:application/force-download");//header('Content-type:application/vnd.ms-excel;charset=utf-8');header("Content-Type:application/octet-stream");//header("Content-Type:application/download");$user_agent = $_SERVER['HTTP_USER_AGENT'];if(preg_match("/MSIE/", $user_agent) || preg_match("/Trident/", $user_agent)){$fileName = str_replace('+','%20',urlencode($fileName));header('content-disposition:attachment; filename="'.$fileName.'.xlsx"');}else if(preg_match("/Firefox/", $user_agent)){header("content-disposition:attachment; filename*=\"utf8''".$fileName.'.xlsx"');}else{header('content-disposition:attachment; filename="'.$fileName.'.xlsx"');}//header("Content-Transfer-Encoding:binary");//處理表格顏色if ($expColor) {foreach ($expColor as $one) {$tmp = $one['letters'][0] . $one['num'][0] . ':' . $one['letters'][1] . $one['num'][1];$tmpColor = $one['color'];$objPHPExcel->getActiveSheet()->getStyle($tmp)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);$objPHPExcel->getActiveSheet()->getStyle($tmp)->getFill()->getStartColor()->setARGB($tmpColor);}}//凍結表頭if ($fixed) {// $objPHPExcel->getActiveSheet()->getStyle()->getFont()->setSize(10);//固定表頭 $fixed 代表需要固定的行 第一行為2 第二行為3$objPHPExcel->getActiveSheet()->freezePane('A' . $fixed);$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$styleThinBlackBorderOutline = array('borders' => array('allborders' => array( //設置全部邊框'style' => \PHPExcel_Style_Border::BORDER_THIN //粗的是thick),),);$h = 'A2:'. $cellName[$cellNum - 1]. (2 + $dataNum + + count($othTitle));$objPHPExcel->getActiveSheet()->getStyle($h)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet()->getStyle($h)->applyFromArray($styleThinBlackBorderOutline);//設置字體大小$objPHPExcel->getActiveSheet()->getStyle($h)->getFont()->setSize(10);$objPHPExcel->getActiveSheet()->getStyle('A2:' . $cellName[$cellNum - 1] . 2)->getFont()->setSize(11);$objPHPExcel->getActiveSheet()->getStyle($h)->getFont()->setBold(true);//表頭設置$objPHPExcel->getActiveSheet()->getStyle( 'A1')->getFont()->setSize(22);$objPHPExcel->getActiveSheet()->getStyle('A1:'. $cellName[$cellNum - 1] . '1')->applyFromArray($styleThinBlackBorderOutline);//設置行高$objPHPExcel-> getActiveSheet()-> getRowDimension('1')-> setRowHeight(30);//設置字體加粗$objPHPExcel->getActiveSheet()->getStyle()->getFont()->setBold(true);//設置字體// $objPHPExcel->getActiveSheet()->getStyle( 'B1')->getFont()->setName('Candara' );//自適應寬度// $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);}$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');$objWriter->save('php://output');exit; }總結
以上是生活随笔為你收集整理的PHP 导出excel合并相同数据单元格的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python ---单例(Singlet
- 下一篇: 利用Sqoop在数据库和Hive、HDF