//这里是取得数据源的
ReturnModel mm = statisticService.getTeaWorkInfoBySchForExcel(schoolId, bank, title, date1, date2);
Map ob = (Map)mm.getData();
List<Map> result = (List<Map>) ob.get("data");
for(Map map:result){
//如果应收作业为0,则提交率和批改率都为0
int su = Integer.parseInt(map.get("submitCount").toString());//实收作业数
if(map.get("shwCount").toString().equals("0")){
map.put("subRate","0%");
//map.put("completeRate","0%");
}else{
int sc = Integer.parseInt(map.get("shwCount").toString());//应收作业数
map.put("subRate",(su*100/sc)+"%");//添加提交率
}
if(map.get("submitCount").toString().equals("0")){
map.put("completeRate","0%");
}else{
int cp = Integer.parseInt(map.get("completeCount").toString());//批改人数
map.put("completeRate",(cp*100/su)+"%");//添加批改率
}
}
//设置Excel表格的与数据源的属性字段所对应,需要导出哪些设置哪些
String[] name1 = {"classes","displayName", "title", "thwCount", "objCount", "subCount", "shwCount", "submitCount", "completeCount","subRate","completeRate"};
String[] name2 = {"班级","教师", "学科", "布置作业数", "客观题数", "主观题数", "应收作业", "实收作业", "批改人数","提交率","批改率"};
int num = name1.length;
// 声明一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
//声明一个单子并命名
HSSFSheet sheet = wb.createSheet();
//给单子名称一个长度
sheet.setDefaultColumnWidth((short) 15);
// 生成一个样式
HSSFCellStyle style = wb.createCellStyle();
//创建第一行(也可以称为表头)
HSSFRow row = sheet.createRow(0);
//样式字体居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//给表头第一行一次创建单元格
HSSFCell cell;
for (int i = 0; i < num; i++) {
cell = row.createCell(i);
cell.setCellValue(name2[i]);
cell.setCellStyle(style);
}
List<Map> Data = result;
//向单元格里填充数据
for (int i = 0; i < Data.size(); i++) {
row = sheet.createRow(i + 1);
for (int j = 0; j < name1.length; j++) {
String jjj = StringUtil.toString(Data.get(i).get(name1[j]));
row.createCell(j).setCellValue(StringUtil.toString(Data.get(i).get(name1[j])));
}
}
//这里是生成导出数据源的时间
String[] dd = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date()).split(" ");
//表名根据当前时间的时、分、秒生成,如当前时间为10点09分07秒,则表名为100907.xls
String d = dd[1].split(":")[0] + dd[1].split(":")[1] + dd[1].split(":")[2];
// 清空response 在浏览器中以弹框的形式出现提示下载
response.reset();
// 设置response的Header
try {
response.addHeader("Content-Disposition", "attachment;filename=" + new String(("学校详情表.xls").getBytes("UTF-8"), "ISO8859-1"));
} catch (Exception ex) {
}
response.setContentType("application/octet-stream");
try {
wb.write(response.getOutputStream());
} catch (Exception ex) {
}
}