controller:
@ApiOperation(value = "会议考勤-考勤统计-查看-导出")
@GetMapping("/exportViewAttendanceRecordInfo")
public void exportViewAttendanceRecordInfo(HttpServletResponse response, HttpServletRequest request, HttpSession session,
@ApiParam(value = "用户id", required = true) @RequestParam(required = true) String userId,
@ApiParam(value = "搜索会议名称", required = false) @RequestParam(required = false) String searchName,
@ApiParam(value = "回执状态", required = false) @RequestParam(required = false) Integer receiptStatus,
@ApiParam(value = "签到签退状态", required = false) @RequestParam(required = false) Integer signStatus) throws UnsupportedEncodingException {
List<AttendanceInfoDto> receiptDtoList = receiptService.viewAttendanceRecordInfo(userId,searchName, receiptStatus, signStatus);
String path = request.getSession().getServletContext().getRealPath("/download/");
String fileName = "考勤统计查看";
String s = "" + fileName + ".xlsx";
Workbook wb = receiptService.exportViewAttendanceRecordInfo(receiptDtoList);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(s + ".xls", "UTF-8"));
OutputStream ouputStream = null;
try {
ouputStream = response.getOutputStream();
wb.write(ouputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
service实现类
@Override
public Workbook exportViewAttendanceRecordInfo(List<AttendanceInfoDto> receiptDtoList) {
int num = 1;
if (receiptDtoList != null && receiptDtoList.size() > 0) {
for (AttendanceInfoDto attendanceInfoDto : receiptDtoList) {
List<AttendanceUserDto> attendanceUserList = attendanceInfoDto.getAttendanceUserList();
int size = attendanceUserList.size();
if (num < size) {
num = size;
}
}
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String fileName = "考勤统计查看";
Workbook wb = null;
try {
// 初始化excel表
Sheet sheet = null;
wb = new XSSFWorkbook();
// 创建sheet对象
sheet = (Sheet) wb.createSheet("sheet1");
// 创建sheet对象
if (sheet == null) {
sheet = (Sheet) wb.createSheet("sheet1");
}
// 添加表头
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
row.setHeight((short) 540);
cell.setCellValue(fileName); // 创建第一行
CellStyle style = wb.createCellStyle(); // 样式对象
style.setWrapText(true);// 指定当单元格内容显示不下时自动换行
cell.setCellStyle(style); // 样式,居中
Font font = wb.createFont();
font.setFontName("宋体");
font.setFontHeight((short) 280);
style.setFont(font);
// 单元格合并
// 四个参数分别是:起始行,起始列,结束行,结束列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (4 + num * 3) - 1));
sheet.autoSizeColumn(5200);
row = sheet.createRow(1); // 创建第二行
for (int i = 0; i < (4 + num * 3); i++) {
cell = row.createCell(i);
cell.setCellStyle(style); // 样式,居中
sheet.setColumnWidth(i, 20 * 256);
}
row.getCell(0).setCellValue("会议名称");
row.getCell(1).setCellValue("会议地点");
row.getCell(2).setCellValue("回执情况");
row.getCell(3).setCellValue("会议时间");
for (int i = 3, j = 1; j <= num; i += 3, j++) {
// i = 3 3,4,5
// i = 5 6,7,8
// i = 8 9,10,11
row.getCell(i + 1).setCellValue("考勤" + j);
row.getCell(i + 2).setCellValue("签到时间");
row.getCell(i + 3).setCellValue("签退时间");
}
row.setHeight((short) 540);
int i = 0;
for (AttendanceInfoDto attendanceInfoDto : receiptDtoList) {
List<AttendanceUserDto> attendanceUserList = attendanceInfoDto.getAttendanceUserList();
String conferenceManagementName = attendanceInfoDto.getConferenceManagementName();
String conferenceManagementAddress = attendanceInfoDto.getConferenceManagementAddress();
String conferenceManagementTime = attendanceInfoDto.getConferenceManagementTime();
Integer receiptStatus = attendanceInfoDto.getReceiptStatus();
String status = null;
if (receiptStatus.equals(Receipt.RECEIPT_IN)) {
status = "参加";
} else if (receiptStatus.equals(Receipt.RECEIPT_LEAVE)) {
status = "请假";
} else if (receiptStatus.equals(Receipt.RECEIPT_NO)) {
status = " ";
}
row = (Row) sheet.createRow(i + 2);
row.setHeight((short) 500);
row.createCell(0).setCellValue(conferenceManagementName);
row.createCell(1).setCellValue(conferenceManagementAddress);
row.createCell(2).setCellValue(status);
row.createCell(3).setCellValue(conferenceManagementTime);
for (int m = 2, n = 0; n < attendanceUserList.size(); m += 3, n++) {
AttendanceUserDto attendanceUserDto = attendanceUserList.get(n);
String conferenceAttendanceTime = attendanceUserDto.getConferenceAttendanceTime();
Long signIn = attendanceUserDto.getSignIn();
Long signOff = attendanceUserDto.getSignOff();
if (signIn.equals(0L)) {
row.createCell(m + 2).setCellValue(" ");
} else {
row.createCell(m + 2).setCellValue(sdf.format(signIn));
}
if (signOff.equals(0L)) {
row.createCell(m + 3).setCellValue(" ");
} else {
row.createCell(m + 3).setCellValue(sdf.format(signOff));
}
row.createCell(m + 1).setCellValue(conferenceAttendanceTime);
}
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
return wb;
}
结果: