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

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

		<!--excel解析poi包-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.9</version>
		</dependency>
		
		<!--excel解析poi包-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.9</version>
		</dependency>

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

  <button type="button" lay-submit="" class="layui-btn layui-btn-warm" id="exportExcel" name="exportExcel">
        <i class="layui-icon"></i>导出Excel</button>

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<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();
				}

			}

		}
	}

3.service层代码

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

4.serviceImpl实现层代码

public List<HashMap<String, Object>> ExcelOut(ParamModel paramModel) {
	
	return spDoctorTreatMapper.ExcelOut(paramModel);
}

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

<select id="ExcelOut" resultType="java.util.Map"  parameterType="***写自己实体类的全类名***" >
此处省略一万字sql代码
</select>

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值