1. 程式人生 > >PHPexcel匯出_帶合併單元格/邊框背景/_有效果圖_thinkphp

PHPexcel匯出_帶合併單元格/邊框背景/_有效果圖_thinkphp

##供稿單位匯出
    public function gonggao_excel(){
        $color='0xCC000000';
        //查詢所有供稿單位
        $order='paixu asc,id desc';
        $where=array('token'=>$this->token,'status'=>'1');
        $data=M('gonggao')->where($where)->order($order)->select();
        //增加供稿單位的文章數量
        foreach ($data as $key =>
$value) { $data[$key]['shuliang']=M('img')->where(array('gonggaoid'=>$value['id']))->count(); $data[$key]['title']=M('img')->where(array('gonggaoid'=>$value['id']))->getfield('title',true); } // //查詢出所有行數 // $all_count=0; // foreach ($data as $key =>
$value) { // if(!empty($value['title'])){ // $all_count=$all_count+count($value['title']); // }else{ // $all_count++; // } //重組陣列 foreach ($data as $key => $value) { if(!empty($value['title'])){ foreach ($value['title'
] as $k => $v) { $newData[]=$v; } }else{ $newData[]=''; } } //dump($newData); //dump($data); //die; // 引用phpexcel類 import('Lib/ORG/PHPExcel'); // 建立物件 $objPHPExcel = new PHPExcel(); // 顯示錯誤資訊 error_reporting(E_ALL); // Set properties $objPHPExcel->getProperties()->setCreator("趙英傑") ->setLastModifiedBy("趙英傑") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); // 設定寬度 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(40); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(60); // 設定行高度 $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20); //設定預設行高 $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30); //第一行行高 $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20); //第二行行高 // 字型和樣式 $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(12); //字型大小 $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getFont()->setBold(false); //第二行是否加粗 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true); //第一行是否加粗 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16); //第一行字型大小 // 設定垂直居中 $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //邊框樣式 $styleArray = array( 'borders' => array( 'allborders' => array( //'style' => PHPExcel_Style_Border::BORDER_THICK,//邊框是粗的 'style' => PHPExcel_Style_Border::BORDER_THIN,//細邊框 'color' => array('argb' => $color), ), ), ); $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->applyFromArray($styleArray); //邊框 //$objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); // 設定水平居中 $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // 合併 $objPHPExcel->getActiveSheet()->mergeCells('A1:D1'); // 表頭 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '供稿單位文章統計') ->setCellValue('A2', '編號') ->setCellValue('B2', '供稿單位') ->setCellValue('C2', '文章數量') ->setCellValue('D2', '文章名稱'); // 內容 // for ($i = 0, $len = count($data); $i < $len; $i++) { // $objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($i + 3), $i); // $objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($i + 3), $data[$i]['gonggao']); // $objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($i + 3), $data[$i]['shuliang']); // $objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 3), $data[$i]['status']); // $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); // $objPHPExcel->getActiveSheet()->getRowDimension($i + 3)->setRowHeight(16); // } //重構內容-文章名稱錄入 for ($i = 0, $len = count($newData); $i < $len; $i++) { $objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 3), $newData[$i]); $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); //左對齊 $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); //邊框設定 //$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); // $objPHPExcel->getActiveSheet()->getRowDimension($i + 3)->setRowHeight(16); //重構行高 $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->applyFromArray($styleArray); } // //查詢出所有行數 // $all_count=0; // foreach ($data as $key => $value) { // if(!empty($value['title'])){ // $all_count=$all_count+count($value['title']); // }else{ // $all_count++; // } //合併對應單元格並錄入編號/供稿單位/數量。 $ii=3;//從第三行開始的 for ($i = 0, $len = count($data); $i < $len; $i++) { if(count($data[$i]['title'])>0){ //合併 注意-1,因為當前單位有內容且是第一篇 $objPHPExcel->getActiveSheet()->mergeCells('A' . ($ii) . ':A' . ($ii-1+count($data[$i]['title']) )); $objPHPExcel->getActiveSheet()->mergeCells('B' . ($ii) . ':B' . ($ii-1+count($data[$i]['title']) )); $objPHPExcel->getActiveSheet()->mergeCells('C' . ($ii) . ':C' . ($ii-1+count($data[$i]['title']) )); //錄入記錄 $objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($ii), $i+1); $objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($ii), $data[$i]['gonggao']); $objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($ii), count($data[$i]['title'])); //居中 $objPHPExcel->getActiveSheet()->getStyle('A' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('C' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $ii=$ii-1+count($data[$i]['title']); $ii++; }else{ //錄入記錄 $objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($ii), $i+1); $objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($ii), $data[$i]['gonggao']); $objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($ii), count($data[$i]['title'])); //居中 $objPHPExcel->getActiveSheet()->getStyle('A' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('B' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('C' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $ii++; } } // Rename sheet $objPHPExcel->getActiveSheet()->setTitle('供稿單位文章統計'); // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); // 輸出 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . '供稿單位' . '.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; }