- /**
- *
- * execl数据导出
- * 应用场景:订单导出
- * @param string $title 模型名(如Member),用于导出生成文件名的前缀
- * @param array $cellName 表头及字段名
- * @param array $data 导出的表数据
- *
- * 特殊处理:合并单元格需要先对数据进行处理
- */
- function exportOrderExcel($title,$cellName,$data)
- {
- //引入核心文件
- vendor("PHPExcel.PHPExcel");
- $objPHPExcel = new \PHPExcel();
- //定义配置
- $topNumber = 2;//表头有几行占用
- $xlsTitle = iconv(‘utf-8’, ‘gb2312’, $title);//文件名称
- $fileName = $title.date(‘_YmdHis’);//文件名称
- $cellKey = 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’
- );
- //写在处理的前面(了解表格基本知识,已测试)
- // $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);//所有单元格(行)默认高度
- // $objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);//所有单元格(列)默认宽度
- // $objPHPExcel->getActiveSheet()->getRowDimension(‘1’)->setRowHeight(30);//设置行高度
- // $objPHPExcel->getActiveSheet()->getColumnDimension(‘C’)->setWidth(30);//设置列宽度
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->setSize(18);//设置文字大小
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->setBold(true);//设置是否加粗
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);// 设置文字颜色
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置文字居左(HORIZONTAL_LEFT,默认值)中(HORIZONTAL_CENTER)右(HORIZONTAL_RIGHT)
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//设置填充颜色
- // $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFill()->getStartColor()->setARGB(‘FF7F24’);//设置填充颜色
- // $objPHPExcel->getActiveSheet()->getCell(‘A1’)->getHyperlink()->setUrl("sheet://sheet1!A1"); //加文件内链接
- //处理表头标题
- $objPHPExcel->getActiveSheet()->mergeCells(‘A1:’.$cellKey[count($cellName)-1].’1′);//合并单元格(如果要拆分单元格是需要先合并再拆分的,否则程序会报错)
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue(‘A1′,’订单信息’);
- $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->setBold(true);
- $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getFont()->setSize(18);
- $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
- $objPHPExcel->getActiveSheet()->getStyle(‘A1’)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
- //处理表头
- foreach ($cellName as $k=>$v)
- {
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellKey[$k].$topNumber, $v[1]);//设置表头数据
- $objPHPExcel->getActiveSheet()->freezePane($cellKey[$k].($topNumber+1));//冻结窗口
- $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//设置是否加粗
- $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
- if($v[3] > 0)//大于0表示需要设置宽度
- {
- $objPHPExcel->getActiveSheet()->getColumnDimension($cellKey[$k])->setWidth($v[3]);//设置列宽度
- }
- }
- //处理数据
- foreach ($data as $k=>$v)
- {
- foreach ($cellName as $k1=>$v1)
- {
- $objPHPExcel->getActiveSheet()->setCellValue($cellKey[$k1].($k+1+$topNumber), $v[$v1[0]]);
- if($v[‘end’] > 0)
- {
- if($v1[2] == 1)//这里表示合并单元格
- {
- $objPHPExcel->getActiveSheet()->mergeCells($cellKey[$k1].$v[‘start’].’:’.$cellKey[$k1].$v[‘end’]);
- $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k1].$v[‘start’])->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
- }
- }
- if($v1[4] != "" && in_array($v1[4], array("LEFT","CENTER","RIGHT")))
- {
- $v1[4] = eval(‘return PHPExcel_Style_Alignment::HORIZONTAL_’.$v1[4].’;’);
- //这里也可以直接传常量定义的值,即left,center,right;小写的strtolower
- $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k1].($k+1+$topNumber))->getAlignment()->setHorizontal($v1[4]);
- }
- }
- }
- //导出execl
- header(‘pragma:public’);
- header(‘Content-type:application/vnd.ms-excel;charset=utf-8;name="’.$xlsTitle.’.xls"’);
- header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
- $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5’);
- $objWriter->save(‘php://output’);
- exit;
- }
复制代码
下面是这个类的一些操作说明
- include ‘PHPExcel.php’;
- include ‘PHPExcel/Writer/Excel2007.php’;
- //或者include ‘PHPExcel/Writer/Excel5.php’; 用于输出.xls的
- 创建一个excel
- $objPHPExcel = new PHPExcel();
- // 输出Excel表格到浏览器下载
- header(‘Content-Type: application/vnd.ms-excel’);
- header(‘Content-Disposition: attachment;filename="abc.xls"’);
- header(‘Cache-Control: max-age=0’);
- // If you’re serving to IE 9, then the following may be needed
- header(‘Cache-Control: max-age=1’);
- // If you’re serving to IE over SSL, then the following may be needed
- header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’); // Date in the past
- header(‘Last-Modified: ‘ . gmdate(‘D, d M Y H:i:s’) . ‘ GMT’); // always modified
- header(‘Cache-Control: cache, must-revalidate’); // HTTP/1.1
- header(‘Pragma: public’); // HTTP/1.0
- $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
- $objWriter->save(‘php://output’);
- ——————————————————————————————————————–
- 设置excel的属性:
- 创建人
- $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
- 最后修改人
- $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
- 标题
- $objPHPExcel->getProperties()->settitle("Office 2007 XLSX Test Document");
- 题目
- $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
- 描述
- $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
- 关键字
- $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
- 种类
- $objPHPExcel->getProperties()->setCategory("Test result file");
- ——————————————————————————————————————–
- 设置当前的sheet
- $objPHPExcel->setActiveSheetIndex(0);
- 设置sheet的name
- $objPHPExcel->getActiveSheet()->settitle(‘Simple’);
- 设置单元格的值
- $objPHPExcel->getActiveSheet()->setCellValue(‘A1’, ‘String’);
- $objPHPExcel->getActiveSheet()->setCellValue(‘A2’, 12);
- $objPHPExcel->getActiveSheet()->setCellValue(‘A3’, true);
- $objPHPExcel->getActiveSheet()->setCellValue(‘C5’, ‘=SUM(C2:C4)’);
- $objPHPExcel->getActiveSheet()->setCellValue(‘B8’, ‘=MIN(B2:C5)’);
- 合并单元格
- $objPHPExcel->getActiveSheet()->mergeCells(‘A18:E22’);
- 分离单元格
- $objPHPExcel->getActiveSheet()->unmergeCells(‘A28:B28’);
- 冻结窗口
- $objPHPExcel->getActiveSheet()->freezePane(‘A2’);
- 保护cell
- $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection!
- $objPHPExcel->getActiveSheet()->protectCells(‘A3:E13’, ‘PHPExcel’);
- 设置格式
- // Set cell number formats
- echo date(‘H:i:s’) . " Set cell number formats\n";
- $objPHPExcel->getActiveSheet()->getstyle(‘E4’)->getNumberFormat()->setFormatCode(PHPExcel_style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
- $objPHPExcel->getActiveSheet()->duplicatestyle( $objPHPExcel->getActiveSheet()->getstyle(‘E4’), ‘E5:E13’ );
- 设置宽width
- // Set column widths
- $objPHPExcel->getActiveSheet()->getColumnDimension(‘B’)->setAutoSize(true);
- $objPHPExcel->getActiveSheet()->getColumnDimension(‘D’)->setWidth(12);
- // 设置单元格高度
- // 所有单元格默认高度
- $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);
- // 第一行的默认高度
- $objPHPExcel->getActiveSheet()->getRowDimension(‘1’)->setRowHeight(30);
- 设置font
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFont()->setName(‘Candara’);
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFont()->setSize(20);
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFont()->setBold(true);
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFont()->setUnderline(PHPExcel_style_Font::UNDERLINE_SINGLE);
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFont()->getColor()->setARGB(PHPExcel_style_Color::COLOR_WHITE);
- $objPHPExcel->getActiveSheet()->getstyle(‘E1’)->getFont()->getColor()->setARGB(PHPExcel_style_Color::COLOR_WHITE);
- $objPHPExcel->getActiveSheet()->getstyle(‘D13’)->getFont()->setBold(true);
- $objPHPExcel->getActiveSheet()->getstyle(‘E13’)->getFont()->setBold(true);
- 设置align
- $objPHPExcel->getActiveSheet()->getstyle(‘D11’)->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_RIGHT);
- $objPHPExcel->getActiveSheet()->getstyle(‘D12’)->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_RIGHT);
- $objPHPExcel->getActiveSheet()->getstyle(‘D13’)->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_RIGHT);
- $objPHPExcel->getActiveSheet()->getstyle(‘A18’)->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_JUSTIFY);
- //垂直居中
- $objPHPExcel->getActiveSheet()->getstyle(‘A18’)->getAlignment()->setVertical(PHPExcel_style_Alignment::VERTICAL_CENTER);
- 设置column的border
- $objPHPExcel->getActiveSheet()->getstyle(‘A4’)->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN);
- $objPHPExcel->getActiveSheet()->getstyle(‘B4’)->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN);
- $objPHPExcel->getActiveSheet()->getstyle(‘C4’)->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN);
- $objPHPExcel->getActiveSheet()->getstyle(‘D4’)->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN);
- $objPHPExcel->getActiveSheet()->getstyle(‘E4’)->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN);
- 设置border的color
- $objPHPExcel->getActiveSheet()->getstyle(‘D13’)->getBorders()->getLeft()->getColor()->setARGB(‘FF993300’);
- $objPHPExcel->getActiveSheet()->getstyle(‘D13’)->getBorders()->getTop()->getColor()->setARGB(‘FF993300’);
- $objPHPExcel->getActiveSheet()->getstyle(‘D13’)->getBorders()->getBottom()->getColor()->setARGB(‘FF993300’);
- $objPHPExcel->getActiveSheet()->getstyle(‘E13’)->getBorders()->getTop()->getColor()->setARGB(‘FF993300’);
- $objPHPExcel->getActiveSheet()->getstyle(‘E13’)->getBorders()->getBottom()->getColor()->setARGB(‘FF993300’);
- $objPHPExcel->getActiveSheet()->getstyle(‘E13’)->getBorders()->getRight()->getColor()->setARGB(‘FF993300’);
- 设置填充颜色
- $objPHPExcel->getActiveSheet()->getstyle(‘A1’)->getFill()->setFillType(PHPExcel_style_Fill::FILL_SOLID);
- $objPHPExcel->getActiveSheet()->getstyle(‘A1’)->getFill()->getStartColor()->setARGB(‘FF808080’);
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFill()->setFillType(PHPExcel_style_Fill::FILL_SOLID);
- $objPHPExcel->getActiveSheet()->getstyle(‘B1’)->getFill()->getStartColor()->setARGB(‘FF808080’);
- 加图片
- /*实例化插入图片类*/
- $objDrawing = new PHPExcel_Worksheet_Drawing();
- /*设置图片路径 切记:只能是本地图片*/
- $objDrawing->setPath($img_val);
- /*设置图片高度*/
- $objDrawing->setWidth(200);
- $img_height[] = $objDrawing->getHeight();
- /*设置图片要插入的单元格*/
- $objDrawing->setCoordinates($img_k[$j].$i);
- /*设置图片所在单元格的格式*/
- $objDrawing->setOffsetX(10);
- $objDrawing->setOffsetY(10);
- $objDrawing->setRotation(0);
- $objDrawing->getShadow()->setVisible(true);
- $objDrawing->getShadow()->setDirection(50);
- $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
- 导出Excel表格例子
- <?php
- $datas = array(
- array(‘王城’, ‘男’, ’18’, ‘1997-03-13’, ‘18948348924’),
- array(‘李飞虹’, ‘男’, ’21’, ‘1994-06-13’, ‘159481838924’),
- array(‘王芸’, ‘女’, ’18’, ‘1997-03-13’, ‘18648313924’),
- array(‘郭瑞’, ‘男’, ’17’, ‘1998-04-13’, ‘15543248924’),
- array(‘李晓霞’, ‘女’, ’19’, ‘1996-06-13’, ‘18748348924’),
- );
- include ‘PHPExcel.php’;
- include ‘PHPExcel/Writer/Excel2007.php’;
- //或者include ‘PHPExcel/Writer/Excel5.php’; 用于输出.xls的
- // 创建一个excel
- $objPHPExcel = new PHPExcel();
- // Set document properties
- $objPHPExcel->getProperties()->setCreator("Phpmarker")->setLastModifiedBy("Phpmarker")->settitle("Phpmarker")->setSubject("Phpmarker")->setDescription("Phpmarker")->setKeywords("Phpmarker")->setCategory("Phpmarker");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue(‘A1’, ‘名字’)->setCellValue(‘B1’, ‘性别’)->setCellValue(‘C1’, ‘年龄’)->setCellValue(‘D1’, ‘出生日期’)->setCellValue(‘E1’, ‘电话号码’);
- // Rename worksheet
- $objPHPExcel->getActiveSheet()->settitle(‘Phpmarker-‘ . date(‘Y-m-d’));
- // Set active sheet index to the first sheet, so Excel opens this as the first sheet
- $objPHPExcel->setActiveSheetIndex(0);
- $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);
- $objPHPExcel->getActiveSheet()->freezePane(‘A2’);
- $i = 2;
- foreach($datas as $data){
- $objPHPExcel->getActiveSheet()->setCellValue(‘A’ . $i, $data[0])->getstyle(‘A’.$i)->getAlignment()->setHorizontal(PHPExcel_style_Alignment::VERTICAL_CENTER);
- $objPHPExcel->getActiveSheet()->setCellValue(‘B’ . $i, $data[1]);
- $objPHPExcel->getActiveSheet()->setCellValue(‘C’ . $i, $data[2]);
- $objPHPExcel->getActiveSheet()->setCellValueExplicit(‘D’. $i, $data[3],PHPExcel_Cell_DataType::TYPE_STRING);
- $objPHPExcel->getActiveSheet()->getstyle(‘D’ . $i)->getNumberFormat()->setFormatCode("@");
- // 设置文本格式
- $objPHPExcel->getActiveSheet()->setCellValueExplicit(‘E’. $i, $data[4],PHPExcel_Cell_DataType::TYPE_STRING);
- $objPHPExcel->getActiveSheet()->getstyle(‘E’ . $i)->getAlignment()->setWrapText(true);
- $i ;
- }
- $objActSheet = $objPHPExcel->getActiveSheet();
- // 设置CELL填充颜色
- $cell_fill = array(
- ‘A1’,
- ‘B1’,
- ‘C1’,
- ‘D1’,
- ‘E1’,
- );
- foreach($cell_fill as $cell_fill_val){
- $cellstyle = $objActSheet->getstyle($cell_fill_val);
- // background
- // $cellstyle->getFill()->setFillType(PHPExcel_style_Fill::FILL_SOLID)->getStartColor()->setARGB(‘fafa00’);
- // set align
- $cellstyle->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_LEFT)->setVertical(PHPExcel_style_Alignment::VERTICAL_CENTER);
- // font
- $cellstyle->getFont()->setSize(12)->setBold(true);
- // border
- $cellstyle->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB(‘FFFF0000’);
- $cellstyle->getBorders()->getBottom()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB(‘FFFF0000’);
- $cellstyle->getBorders()->getLeft()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB(‘FFFF0000’);
- $cellstyle->getBorders()->getRight()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB(‘FFFF0000’);
- }
- $objPHPExcel->getActiveSheet()->getRowDimension(‘1’)->setRowHeight(30);
- $objActSheet->getColumnDimension(‘A’)->setWidth(18.5);
- $objActSheet->getColumnDimension(‘B’)->setWidth(23.5);
- $objActSheet->getColumnDimension(‘C’)->setWidth(12);
- $objActSheet->getColumnDimension(‘D’)->setWidth(12);
- $objActSheet->getColumnDimension(‘E’)->setWidth(12);
- $filename = ‘2015030423’;
- ob_end_clean();//清除缓冲区,避免乱码
- header(‘Content-Type: application/vnd.ms-excel’);
- header(‘Content-Disposition: attachment;filename="’.$filename.’.xls"’);
- header(‘Cache-Control: max-age=0’);
- // If you’re serving to IE 9, then the following may be needed
- header(‘Cache-Control: max-age=1’);
- // If you’re serving to IE over SSL, then the following may be needed
- header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’); // Date in the past
- header(‘Last-Modified: ‘ . gmdate(‘D, d M Y H:i:s’) . ‘ GMT’); // always modified
- header(‘Cache-Control: cache, must-revalidate’); // HTTP/1.1
- header(‘Pragma: public’); // HTTP/1.0
- $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
- $objWriter->save(‘php://output’);
复制代码记得在Header 之前加 ob_end_clean() 清除缓冲区,避免乱码