因前几天找的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>
帮你到这啦!已经特别全了,希望对看此贴的人有帮助,还有什么问题的话欢迎留言,看到会回复的,希望大家共同进步!