浏览本文章之前可以先去看下ssm导出excel导出到桌面的文章,弹框下载功能算是在那个基础之上改造的:
链接:https://blog.csdn.net/zhi258wei/article/details/91491178
1.一定注意!
前端跳转后端时一定一定不要用ajax提交!不然下载框弹不出来。可以选用form表单提交或者[removed].href直接提交都可以。
$('#exportExcel').on('click', function(){
layer.confirm('是否导出此表格到桌面?',{btn: ['是','否'] }, function(index){
window.location.href="${path}/spPatTreat/ExcelOut.action?doctorCode="+parentData.doctorCode+"&startDate="+parentData.dtStart+"&endDate="+parentData.dtEnd;
layer.close(index);
});
return false;
});
2.@Controller层代码对应要改变一下
@RequestMapping(value = "/ExcelOut",method=RequestMethod.GET)
@ResponseBody
public void ExcelOut(ParamModel param,HttpServletRequest request, HttpServletResponse response) throws IOException {
DateUtilImpl dateUtil = new DateUtilImpl(); //一个时间工具类,与excel核心功能无关
String startDate = request.getParameter("startDate");
String endDate = request.getParameter("endDate");
if(startDate==null) {
startDate=dateUtil.getCurDate()+" 00:00:00";
}
if(endDate==null) {
endDate=dateUtil.getCurDateTime();
}
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd_hh时mm分ss秒");
String s="医生坐诊记录"+ "_" +dateFormat.format(date);
// System.out.println("*****************************"+s);
// 创建一个文件名
String path = s+ ".xlsx";//创建文件名,使用的是日期加’_’加用户名+后缀名,如果使用此处要改
System.out.println(path);
param.setStartDate(startDate);
param.setEndDate(endDate);
//从数据库中查出数据
List<HashMap<String, Object>> lists = spDoctorTreatServiceImpl.ExcelOut(param);//需要改
// System.out.println("*************************"+lists.toString());
String[] title = { "科室", "开始时间", "结束时间","医生工号", "医生姓名","接诊人数"};//设置EXCEL的第一行的标题头(改)
// 创建excel工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建一个工作表sheet
XSSFSheet sheet = workbook.createSheet();
// 创建第一行
XSSFRow row = sheet.createRow(0);
XSSFCell cell = null;
// 插入第一行数据 id 地区名称
for (int i = 0; i < title.length; i++) {
//创建一行的一格
cell = row.createCell(i);
//赋值
cell.setCellValue(title[i]);
}
// 追加数据行数
int j = 1;
HashMap<String, Object> list = null;
for (int i = 0; i < lists.size(); i++) {
//从集合中得到一个对象
list = lists.get(i);
//创建第2行
XSSFRow nextrow = sheet.createRow(i+1);
// 创建第1列并赋值
XSSFCell cessk = nextrow.createCell(0);
cessk.setCellValue((String) list.get("deptName"));//根据自己要求改
cessk = nextrow.createCell(1);
cessk.setCellValue((String) list.get("dtStart"));//改
cessk = nextrow.createCell(2);
cessk.setCellValue((String) list.get("dtEnd"));//改
cessk = nextrow.createCell(3);
cessk.setCellValue((String) list.get("doctorCode"));//改
cessk = nextrow.createCell(4);
cessk.setCellValue((String) list.get("doctorName"));//改
cessk = nextrow.createCell(5);
cessk.setCellValue(Integer.parseInt(new java.text.DecimalFormat("0").format(list.get("patCount"))));//改
//可自己再按照需要添加函数,注意将cessk = nextrow.createCell(num);这其中的num修改就行,按照顺序加上1就行
j++;
}
if (path.equals("")) {
response.getWriter().write("失败,失败原因:参数为空!");
return;
}
// FileOutputStream output = null;//导出到桌面
// try {
// FileSystemView fsv = FileSystemView.getFileSystemView();
// File com=fsv.getHomeDirectory(); //这便是读取桌面路径的方法了
// output=new FileOutputStream(com.getPath()+"\\"+ path);
// workbook.write(output);
// output.flush();
// } catch (IOException e) {
// e.printStackTrace();
// } finally {
// if (output != null) {
// try {
// output.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
response.setContentType("application/vnd.ms-excel; charset=utf-8");//自定义路径
response.setHeader("Content-disposition", "attachment;filename="+new String((path).getBytes(), "iso-8859-1"));
OutputStream ouputStream=null;
try {
ouputStream = response.getOutputStream();
workbook.write(ouputStream);
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
}
}
把这篇文章和我发链接的那篇文章结合起来看,poi方式就很全面了!希望能帮助到大家!