ssm的excel表格导出功能-基于poi方式

因前几天找的layui方式都不可兼容ie8,所以现在只能用poi方式来写了,话不多说,直接上代码。
先把poi包导进来,此贴提供maven方式,直接把这段代码复制到maven 的pom.xml中标签中即可。没使用maven的可以去下载然后导入就ok啦:http://poi.apache.org/download.html

		
		
			org.apache.poi
			poi-ooxml
			3.9
		
		
		
		
			org.apache.poi
			poi
			3.9
		

1.jsp页面
导出按钮,点击时触发导出功能,跳转到下方的js函数里

  

js代码:目前只支持直接导出到桌面,如需选择路径的,参考我的另外一篇文章:

$('#exportExcel').on('click', function(){
 			layer.confirm('是否导出此表格到桌面?',{btn: ['是','否'] }, function(index){
 				$.ajax({
 					url :'${path}/spDoctorTreat/ExcelOut?startDate='+startDate+'&endDate='+endDate,
 					success : function(data) {
 						alert("导出成功!");
 					},
 					error:function(){
 			            alert("导出失败!");
 			        }

 				});
 				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();
		}
		// 创建一个文件名
		String path = "医生坐诊记录"+ "_" + dateUtil.getCurDate()  + ".xlsx";//创建文件名,使用的是日期加’_’加用户名+后缀名,如果使用此处要改
		System.out.println(path);
		param.setStartDate(startDate);
		param.setEndDate(endDate);
		//从数据库中查出数据
		List> 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 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();
				}

			}

		}
	}

3.service层代码

public interface SpDoctorTreatService {
	
	/**
	 * 查询医生坐诊记录
	 * @param paramModel
	 * @return
	 */
	public List> ExcelOut(ParamModel paramModel);//要注意类型与controller层接受数据的**lists**的类型一致
}

4.serviceImpl实现层代码

public List> ExcelOut(ParamModel paramModel) {
	
	return spDoctorTreatMapper.ExcelOut(paramModel);
}

5.mapper类和mapper.xml文件就不粘了,mapper类直接调用mapper.xml中的sql,注意sql返回值类型要填map类型,还是粘一下sql的吧


帮你到这啦!已经特别全了,希望对看此贴的人有帮助,还有什么问题的话欢迎留言,看到会回复的,希望大家共同进步!

你可能感兴趣的:(后端小技巧)