第一步:安装phpexcel类库
composer require phpoffice/phpexcel
第二步:模型引入类库
use PHPExcel;
use PHPExcel_IOFactory;
第三步:模型封装方法
public static function exportToExcel($list)
{
# 此为测试数据,正式数据需要控制器传入$list参数
$list = [
['id'=>1, 'name'=>'苹果', 'num'=>100],
['id'=>2, 'name'=>'梨', 'num'=>200],
['id'=>3, 'name'=>'香蕉', 'num'=>350],
['id'=>4, 'name'=>'菠萝', 'num'=>250],
];
$objPHPExcel = new \PHPExcel();
// 设置sheet
$objPHPExcel->setActiveSheetIndex(0);
// 设置列的宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
// 设置表头
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'ID');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', '水果名称');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', '数量');
//存取数据
$num = 2;
foreach ($list as $k => $v) {
$objPHPExcel->getActiveSheet()->SetCellValue('A' . $num, $v['id']);
$objPHPExcel->getActiveSheet()->SetCellValue('B' . $num, $v['name']);
$objPHPExcel->getActiveSheet()->SetCellValue('C' . $num, $v['num']);
$num++;
}
// 文件名称
$fileName = "水果库存" . date('Y-m-d', time()) . rand(1, 1000);
$xlsName = iconv('utf-8', 'gb2312', $fileName);
// 设置工作表名
$objPHPExcel->getActiveSheet()->setTitle('sheet');
//下载 excel5与excel2007
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
ob_end_clean(); // 清除缓冲区,避免乱码
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl;charset=UTF-8");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header("Content-Disposition:attachment;filename=" . $xlsName . ".xls");
header("Content-Transfer-Encoding:binary");
$objWriter->save("php://output");
exit();
}
第四步:控制器调用模型方法,并传参即可
常见问题:有时点击导出没反应
导出不能通过ajax等方式请求接口调用,只能通过a标签,新开窗口 target="_blank"
<a :href= "此处为导出方法的路由地址" target="_blank">导出</a>
备注:适用于vue element_ui,
<a :href= toExportUrl target="_blank"><el-button type="primary" icon="" style="float:right;">导出</el-button></a>