首先要有PHPExcel类:传送门
只需要保存其中的Classes即可。
在项目中引用PHPExcel.php
我这里放在同目录下:
include("./PHPExcel/PHPExcel.php");
先看看,需要实现目的结果:
先构造,需要保存的数据:
//表头
$header = ['姓名','性别','民族'];
//写入的数据
$data = [
[
'张三',
'男',
'汉族'
],[
'里斯',
'女',
'维吾尔'
],[
'王五',
'男',
'苗族'
],
];
保存为excel文件代码实现:
function exportExcel($fileName,$tableHeader,$data,$sheetTitle='list'){
//引入PHPExcel
include("./PHPExcel/PHPExcel.php");
$objPHPExcel = new PHPExcel();
$objSheet = $objPHPExcel->getActiveSheet();
$objSheet->setTitle($sheetTitle);
//表列字母(暂时支持26列)
$key = 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');
//表头设置
$tableHeaderTimes = count($tableHeader);
foreach ($tableHeader as $k=>$v){
$objSheet->setCellValue($key[$k]."1", $v);
//标题居中
$objSheet->getStyle($key[$k] . "1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
//数据写入
$j = 2;
foreach ($data as $k => $v) {
$times = count($v);
if($times!=$tableHeaderTimes)
exit('数据有误,与表头不对应,请检查!');
$i = 0;
foreach ($v as $v1){
$objSheet->setCellValue($key[$i] . $j, $v1);
$objSheet->getColumnDimension($key[$i])->setWidth(15);
//字体居中
$objSheet->getStyle($key[$i] . $j)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$i++;
}
$j++;
}
$objWrite = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5");//Excel5 Excel2007
//输出至浏览器
header("Content-Type: application/vnd.ms-excel");//Excel5 2003格式
//header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//Excel2007 2007格式
header("Content-Disposition: attachment;filename={$fileName}.xls");
header('Cache-Control:max-age=0');
header('Pragma:public');
header("Content-Type:application/x-msexecl;name={$fileName}.xls");
header("Content-Disposition:inline;filename={$fileName}.xls");
$objWrite->save("php://output");
}
实现:
exportExcel('人事资料',$header,$data,'姓名');