Controller层:
@RequestMapping(value="/admin/download",produces = {"application/vnd.ms-excel;charset=UTF-8"}) public ResponseEntity<byte[]> download(HttpSession session, HttpServletResponse response){ List<CompetitionSignUp> upList=competitionSignUpDao.findAll(); for (int i=0;i<upList.size();i++){ //给报名表中的student 属性赋值 upList.get(i).setStudent(studentDao.findOne(upList.get(i).getStudentId())); } String fileName="学生成绩统计表"; List<Map<String,Object>> list=exportExcel.createExcelRecord(upList); String columnNames[]={"学号","姓名","性别","专业","班级","报名时间"};//列名 String keys[] = {"studentNumber","studentName","studentSex","studentSpecialy","studentClass","time"};//map中的key ByteArrayOutputStream os = new ByteArrayOutputStream(); try { ExcelUtils.createWorkBook(list,keys,columnNames).write(os); } catch (IOException e) { e.printStackTrace(); } byte[] content = os.toByteArray(); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Content-Disposition", "attachment;filename="+ new String((fileName + ".xlsx").getBytes())); ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(content,httpHeaders,HttpStatus.OK); return responseEntity; } }
servicec 层
package com.haue.jobonline.service.impl; import com.haue.jobonline.dao.CompetitionSignUpDao; import com.haue.jobonline.entity.CompetitionSignUp; import com.haue.jobonline.service.SignUpService; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author 赵鑫 * @Time: 2018/7/22 * @Email:[email protected] */ @Service public class ExportExcel { @Resource private CompetitionSignUpDao competitionSignUpDao; public List<Map<String, Object>> createExcelRecord(List<CompetitionSignUp> competitionSignUps) { List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("sheetName", "sheet1"); listmap.add(map); for (int j = 0; j < competitionSignUps.size(); j++) { CompetitionSignUp competitionSignUp=competitionSignUps.get(j); Map<String, Object> mapValue = new HashMap<String, Object>(); // String keys[] = {"studentNumber","studentName","studentSex","studentSpecialy","studentClass","time"};//map中的key mapValue.put("studentNumber", competitionSignUp.getStudent().getStudentSchoolNum()); mapValue.put("studentName",competitionSignUp.getStudent().getStudentName()); mapValue.put("studentSex",competitionSignUp.getStudent().getStudentSex()); mapValue.put("studentSpecialy",competitionSignUp.getStudent().getStudentSpecialty()); mapValue.put("studentClass",competitionSignUp.getStudent().getStudentClass()); mapValue.put("time",competitionSignUp.getSignTime()); listmap.add(mapValue); } return listmap; } }
工具类
package com.haue.jobonline.utils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.List; import java.util.Map; /** * @author 赵鑫 * @Time: 2018/7/22 * @Email:[email protected] */ public class ExcelUtils { /** * 创建excel文档, * list 数据 * @param keys list中map的key数组集合 * @param columnNames excel的列名 * */ public static Workbook createWorkBook(List<Map<String, Object>> list, String []keys, String columnNames[]) { // 创建excel工作簿 Workbook wb = new XSSFWorkbook(); // 创建第一个sheet(页),并命名 Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString()); // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。 for(int i=0;i<keys.length;i++){ sheet.setColumnWidth((short) i, (short) (35.7 * 200)); } // 创建第一行 Row row = sheet.createRow((short) 0); // 创建两种单元格格式 CellStyle cs = wb.createCellStyle(); CellStyle cs2 = wb.createCellStyle(); // 创建两种字体 Font f = wb.createFont(); Font f2 = wb.createFont(); // 创建第一种字体样式(用于列名) f.setFontHeightInPoints((short) 10); f.setColor(IndexedColors.BLACK.getIndex()); f.setBoldweight(Font.BOLDWEIGHT_BOLD); // 创建第二种字体样式(用于值) f2.setFontHeightInPoints((short) 10); f2.setColor(IndexedColors.BLACK.getIndex()); // Font f3=wb.createFont(); // f3.setFontHeightInPoints((short) 10); // f3.setColor(IndexedColors.RED.getIndex()); // 设置第一种单元格的样式(用于列名) cs.setFont(f); cs.setBorderLeft(CellStyle.BORDER_THIN); cs.setBorderRight(CellStyle.BORDER_THIN); cs.setBorderTop(CellStyle.BORDER_THIN); cs.setBorderBottom(CellStyle.BORDER_THIN); cs.setAlignment(CellStyle.ALIGN_CENTER); // 设置第二种单元格的样式(用于值) cs2.setFont(f2); cs2.setBorderLeft(CellStyle.BORDER_THIN); cs2.setBorderRight(CellStyle.BORDER_THIN); cs2.setBorderTop(CellStyle.BORDER_THIN); cs2.setBorderBottom(CellStyle.BORDER_THIN); cs2.setAlignment(CellStyle.ALIGN_CENTER); //设置列名 for(int i=0;i<columnNames.length;i++){ Cell cell = row.createCell(i); cell.setCellValue(columnNames[i]); cell.setCellStyle(cs); } //设置每行每列的值 for (short i = 1; i < list.size(); i++) { // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的 // 创建一行,在页sheet上 Row row1 = sheet.createRow((short) i); // 在row行上创建一个方格 for(short j=0;j<keys.length;j++){ Cell cell = row1.createCell(j); cell.setCellValue(list.get(i).get(keys[j]) == null?" ": list.get(i).get(keys[j]).toString()); cell.setCellStyle(cs2); } } return wb; } }