可变列的Excel导出

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

	

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值