使用PHPExcel类导出excel表格数据,表中带图片导出
/**
*
* 导出Excel
*/
public function export(){//导出Excel
$data = Db::name('test')->select(); // 查询出来的数据
import('PHPExcel.PHPExcel', EXTEND_PATH);
$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);
// 设置第一列的标题值
$objActSheet->setCellValue('A1', '名称');
$objActSheet->setCellValue('B1', '二维码编号');
$objActSheet->setCellValue('C1', '分类名');
$objActSheet->setCellValue('D1', '内容摘要');
$objActSheet->setCellValue('E1', '关键字');
$objActSheet->setCellValue('F1', '二维码类型');
$objActSheet->setCellValue('G1', '图片');
// 设置个表格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(16);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
// 垂直居中
$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);
// 组装数据,处理图片
$inputFileName = ROOT_PATH .'upload' .DS;
//
foreach($data as $k=>$v){
$k +=2;
$objActSheet->setCellValue('A'.$k, $v['post_title']);
$objActSheet->setCellValue('B'.$k, $v['qr_number']);
$objActSheet->setCellValue('C'.$k, $v['name']);
$objActSheet->setCellValue('D'.$k, $v['post_excerpt']);
$objActSheet->setCellValue('E'.$k, $v['page_keywords']);
$objActSheet->setCellValue('F'.$k, $v['qr_type']);
//获取到图片信息
// 图片生成
$objDrawing[$k] = new \PHPExcel_Worksheet_Drawing();
if(isset($v['more']['thumbnail']) && !empty($v['more']['thumbnail'])){
if(file_exists($inputFileName.$v['more']['thumbnail'])){
$objDrawing[$k]->setPath($inputFileName.$v['more']['thumbnail']);//这里拼接 . 是因为要在根目录下获取
// 设置宽度高度
$objDrawing[$k]->setHeight(80);//照片高度
$objDrawing[$k]->setWidth(80); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing[$k]->setCoordinates('G'.$k);
// 图片偏移距离
$objDrawing[$k]->setOffsetX(2);
$objDrawing[$k]->setOffsetY(2);
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
// 表格高度
$objActSheet->getRowDimension($k)->setRowHeight(80);
}
}else{
$objActSheet->setCellValue('G'.$k, $v['issuing']);
}
}
$fileName = '测试表.xls';
$fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
// $objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
}