> 本实例是采用THINKPHP5.1+ajax+phpexcel 来实现导出Excel功能。
> 由于ajax的返回值类型是json,text,html,xml类型,或者可以说ajax的接收类型只能是string字符串,不是流类型,所以无法实现文件下载,强行使用会使response出现乱码。因此,如果需要ajax来实现导出功能,则需要在方法中生成Excel文件,构造文件路径URL返回给ajax进行响应下载。
//前端代码:获取筛选条件参数后采用post方式传递URL中,在success回调函数中进行页面重定向,重定向的地址是Excel文件路径
导出Excel
//控制器方法
* 导出Excel
* @param array $params
public function UserListExport(){
if(Request::isAjax()){
$userId = get_admin_id();
$userProfileService = new UserProfileService();
$settingService = new SettingService();
$excelUtil = new ExcelUtil();
$params = Request::post();
$where = $this->formatParams($params);
$list = $userProfileService->selectUserAndProfile($where);
$userList = $userProfileService->formatExportList($list['userList']);
$systemInfo = $settingService->getByName(SettingType::SETTING_TYPE_SYSTEM);
//设置excel表头
$header = ['id','用昵称','用户等级','用户手机号','真实姓名','身份证号','性别','实名状态','推荐人姓名','推荐人手机','推荐人等级'];
//调用导出类,接收返回值(文件路径)
$path = $excelUtil->export($userId,'用户列表','用户',$systemInfo['excel_export'],$header,$userList);
if($path){
//路径拼接域名
$webSite = $settingService->getByName(SettingType::SETTING_TYPE_WEBSITE);
$path = $webSite['basehost'].$path;
$response = ['url'=>$path];
return $this->ajaxSuccess('获取成功',$response);
return $this->ajaxError();
* 导出Excel方法
* @param int $userId 用户id
* @param string $expTitle 表格标题
* @param string $expFileName 导出文件名
* @param string $expFileType 导出文件后缀:xls,csv
* @param array $expHeadArr 导出文件列名
* @param array $expDataList 导出数据
public function export($userId,$expTitle,$expFileName,$expFileType,$expHeadArr,$expDataList){
$time = md5(date('YmdHis',time()).$userId);
$expFileName .= "_".$time.".".$expFileType;
//设置保存路径
$basePath = request()->env('ROOT_PATH').'public';
$baseUrl = DIRECTORY_SEPARATOR .implode(DIRECTORY_SEPARATOR, ['excel',date('Y-m-d',time())]). DIRECTORY_SEPARATOR;
$path = $basePath.$baseUrl;
//路径不存在则创建路径
if(!is_dir($path)){
mkdir($path, 0777, true);
$path = $path.$expFileName;
$objPHPExcel = new \PHPExcel();
//设置Excel属性
$objPHPExcel->getProperties()
->setCreator("Maarten Balliauw") //创建人
->setLastModifiedBy("Maarten Balliauw") //最后修改人
->setTitle("Office 2007 XLSX Test Document") //设置标题
->setSubject("Office 2007 XLSX Test Document") //设置主题
->setDescription("Test document ") //设置备注
->setKeywords( "office 2007 openxml php") //设置关键字
->setCategory( "Test result file"); //设置类别
//设置Excel样式
//设置第一行(标题)合并单元格
$key = ord('A');
$num = count($expHeadArr);
$lastHead = chr($key+$num);
$mergeCells = 'A1:'.$lastHead.'1';
$objPHPExcel->getActiveSheet()->mergeCells($mergeCells);
//单元格居中、字体大小、粗体
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
//设置表头信息
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$expTitle);
foreach($expHeadArr as $head){
$colum = chr($key);
$objPHPExcel->getActiveSheet()->setCellValue($colum.'2',$head);
$objPHPExcel->getActiveSheet()->getStyle($colum.'2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::VERTICAL_CENTER); //表头文字居中
$key += 1;
//写入数据
$colum = 3;
foreach($expDataList as $key =>$row){//行写入
$span = ord("A");
foreach($expDataList[$key] as $keyName => $value){//列写入
$objPHPExcel->getActiveSheet()->setCellValue(chr($span).$colum,$value);
$objPHPExcel->getActiveSheet()->getStyle(chr($span).$colum)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); //文字左对齐中
$objPHPExcel->getActiveSheet()->getColumnDimension(chr($span))->setWidth(13);//设置宽度
$span ++;
$colum ++;
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean();//清除缓冲区,避免乱码
//"Excel2007"生成2007版本的xlsx,"Excel5"生成2003版本的xls
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
//保存路径
$objWriter->save($path);
$filePath = str_replace('\\','/',$baseUrl.$expFileName);
return $filePath;
//直接弹出提示下载,不生成文件
header('pragma:public');
header("Content-Disposition:attachment;filename=$expFileName");
header('Cache-Control: max-age=0');
$objWriter = PHPExcel\_IOFactory:: *createWriter*($objPHPExcel, 'Excel2007');
$objWriter->save( 'php://output');
第一章 PHP基础
HTTPS
GET和POST的区别
PHP 简述
PHP是弱类型语言
PHP超全局变量详情述
PHP字符串处理函数
PHP常用数组函数
PHP文件处理函数
PHP 常用时间函数
PHP 日历函数
PHP 常用url处理函数
PHP 时间戳
冒泡排序算法
PHP 注意事项 易混淆函数区别(面试题常见)
第二章 LNMP
LNMP搭建
LNMP配置文件目录
服务器安装宝塔(Linux)
LNMP添加、删除站点
LNMPphp多版本切换
LNMP部署 thinkphp项目
Operation not permitted解决方法
Nginx
第三章 项目实战经验
PHP 导入导出excle
原生php上传方法实例
thinkphp5.1+ajax实现导出Excel
tinkphp5.1 接收参数筛选excel导出数据
tp5快递登记和excle导入的快递数据对比
TP5导出excel图片和数据--先下载图片到本地服务器
TP6 导出excel表
base64图片流
tp5的上传方法封装实例
多级关系的递归查询
数组转树结构
layui+tp5 异步上传图片
判断是否为索引数组
phpExcel的安装与使用
第四章 数据库
MYSQL数据库
优化mysql数据库的方法
MYSQL事务(重点)
MYSQL索引
MYSQL存储过程
MYSQL触发器
MYSQL外连接、内连接的区别
导入导出数据库
第五章 layui
layui调用第三方接口、提交数据、异步上传图片
layui 导出excel
第六章 tp+微信登录、支付
微信登录、支付