ssm的excel导出功能-可弹框选择下载路径

浏览本文章之前可以先去看下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方式就很全面了!希望能帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值