1、前端使用原生AJAX请求后台并接受后台返回的二进制流文件进行导出excel操作
exportExcel(){
//获取yyyyMMddHHmmss
function getFormatDate() {
var date = new Date();
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
return date.getFullYear() + month + strDate
+ date.getHours() + date.getMinutes() + date.getSeconds();
}
//原生ajax
var xhr = new XMLHttpRequest();
//post方式请求后台的路径
xhr.open('post', `请求路径`, true);
//导出的Excel是二进制数据类型,所以设置为blob
xhr.responseType = 'blob';
//请求头(key,value),请求头可以设置多个key-value对
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
//返回成功,导出的Excel文件
xhr.onload = function () {
if (this.status == 200) {
var blob = this.response;
var a = document.createElement('a');
var url = window.URL.createObjectURL(blob);
a.href = url;
//设置文件名称
a.download = "导出表格"+getFormatDate()+".xlsx";
a.click();
// 5.释放这个临时的对象url
window.URL.revokeObjectURL(url);
}
}
//请求的参数,json格式,后台要用json格式接收
xhr.send(JSON.stringify({
"param1": "testData",
"param2": "testData",
"param3": "testData",
"param4": "testData",
"param5": "testData"
}));
},
2、后台接收参数并返回二进制文件流
@RequestMapping("/exporExcel")
public Result exportExcel(@RequestBody Params params, HttpServletRequest request, HttpServletResponse response){
Result result = new Result();
String name = "导出表格";
try {
String filename = name + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xlsx";
//获取导出表格实体类list,导出表格实体类中的字段需要使用@Excel注解
List<Params> paramsList = iParamService.getList();
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(name,name),Params.class,paramsList );
if (workbook != null) {
EasypoiUtil.downLoadExcel(filename, response, workbook);
}
} catch (Exception e) {
e.printStackTrace();
result.setMsg(e.toString());
result.setCode(ResultEnum.EREOR.getCode());
return result;
}
return null;
}
3、EasypoiUtil.java
public abstract class EasypoiUtil {
public EasypoiUtil() {
}
public static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setCharacterEncoding("UTF-8");
workbook.write(response.getOutputStream());
}
private static String filename(HttpServletRequest request, String filename) throws Exception {
String userAgent = request.getHeader("User-Agent");
if (!userAgent.contains("MSIE") && !userAgent.contains("Trident")) {
filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
} else {
filename = URLEncoder.encode(filename, "UTF-8");
}
return filename;
}
}