首先,由于业务需求,需要把一些数据用excel导出,给硬件人员看。由于我自己用的是laravel 的一键安装包,所以使用laravel自带的Excel就成为了一种奢望。因此,这里使用PHPExcel,这个通用性较强的第三方。
一、下载并引入到项目中
1、先去PHPExcel官网下载,直接去gitHub上下载即可。地址:
https://github.com/PHPOffice/PHPExcel
2、将下载好的文件引进我们的项目
关于laravel引入第三方库的方法:
http://blog.csdn.net/ljfphp/article/details/78546179
3、将关键代码引入控制器方法中
//这里使用base_path()方法获取项目根目录,然后引入文件。
require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel.php');
//
require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');
二、实际demo
//PHPExcel带出excel表格
public function test_export(Request $request){
require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel.php');
require_once(base_path() . '/app/Libs/PHPExcel/Classes/PHPExcel/Writer/Excel2007.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'),
);
// 创建一个excel
$objPHPExcel = new \PHPExcel();
//设置文件创建人,文件名,以及excel表格的表头部分
$objPHPExcel->getProperties()->setCreator("金峰兄")->setLastModifiedBy("金峰兄")->setTitle("金峰兄")->setSubject("金峰兄")->setDescription("金峰兄")->setKeywords("金峰兄")->setCategory("金峰兄");
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '名字')->setCellValue('B1', '性别')->setCellValue('C1', '年龄')->setCellValue('D1', '出生日期')->setCellValue('E1', '电话号码');
// 表格的标题
$objPHPExcel->getActiveSheet()->setTitle('金峰兄-' . date('Y-m-d'));
//设置当前的表格,也就是第一行的表格
$objPHPExcel->setActiveSheetIndex(0);
//设置所有表格的默认高度
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);
//循环赋值,填充表格
foreach ($datas as $k=>$data) {
//由于$k是键名,是从0开始的,而我们的表格的正式内容的第一行是表头部分,比如:姓名,年龄等
//所以这边的 A.($k+2)代表的是A2的内容,相当于都从第二行开始填充
$objPHPExcel->getActiveSheet()->setCellValue('A' . ($k+2), $data[0])->getStyle('A' . ($k+2))->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->setCellValue('B' . ($k+2), $data[1]);
$objPHPExcel->getActiveSheet()->setCellValue('C' . ($k+2), $data[2]);
$objPHPExcel->getActiveSheet()->setCellValueExplicit('D' . ($k+2), $data[3], \PHPExcel_Cell_DataType::TYPE_STRING);
$objPHPExcel->getActiveSheet()->getStyle('D' . ($k+2))->getNumberFormat()->setFormatCode("@");
// 设置文本格式
$objPHPExcel->getActiveSheet()->setCellValueExplicit('E' . ($k+2), $data[4], \PHPExcel_Cell_DataType::TYPE_STRING);
$objPHPExcel->getActiveSheet()->getStyle('E' . ($k+2))->getAlignment()->setWrapText(true);
//}
}
//这边可以打印下,就可以看到我们已经把数组的内容放到excel对象中了
/* var_dump($objPHPExcel);
exit;*/
$objActSheet = $objPHPExcel->getActiveSheet();
// 设置CELL填充颜色
$cell_fill = array(
'A1',
'B1',
'C1',
'D1',
'E1',
);
// TODO 加注释
//设置格式
foreach($cell_fill as $cell_fill_val){
$cellstyle = $objActSheet->getStyle($cell_fill_val);
$cellstyle->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT)->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
// 字体格式,中间的14代表了字体的大小
$cellstyle->getFont()->setSize(14)->setBold(true);
// 边框格式
$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 = '峰兄的测试表格';
ob_end_clean();//清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
header('Cache-Control: max-age=0');
// 如果是在ie9浏览器下,需要用到这个
header('Cache-Control: max-age=1');
// 如果你是在ie浏览器或者https下,需要用到这个
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');
}
这段代码是经过我测试的,大家可以直接粘贴下来,先在本地跑一下,看看生成的文件。然后再仔细的看一下注释,解释的挺清楚的。
具体可参考PHPExcel中文手册:
http://www.jquerycn.cn/a_17115
三、成功演示
这就是我本地测试生成的excel文件,确实是成功了。当然,实际使用中,数据是需要我们自己查询,然后转换为数组的,这个就需要大家根据自己的逻辑来写了。
end