jeecg將excel打包zip導出

            最近接到這樣的需求:原先excel導出只需要導出一個excel,需求變更爲,需要一次導出多個excel文檔。但是一個請求只能輸出一次,所以無法通過輸出流循環將excel導出。轉而改爲將excel文檔全部打包,輸出zip文檔。

代碼如下:

@RequestMapping(params = "exportXlsT")
	public void exportXlsT(SeatEntity rowSeat, HttpServletRequest request, HttpServletResponse response,DataGrid dataGrid, ModelMap map) {

		String rowSeatId = request.getParameter("id");
		String hql = "from SeatResultEntity where 1 = 1 AND ROW_SEAT_ID = ? ";
		List<SeatResultEntity> seatResultList = this.systemService.findHql(hql, rowSeatId);

		String codedFileName = "模板";
		String meetingName = "模板";
		try {
			File template = new File(this.context.getRealPath("/template"), "template.xls");

			List<HSSFWorkbook> hssfWorkbookList = new ArrayList<>();
			List<String> xlsNameList = new ArrayList<>();
			for (int index = 0; index < seatResultList.size(); index++) {
				ServletOutputStream out = response.getOutputStream();
				HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(template));

				if (null != seatResultList.get(index).getRowSeat()
						&& null != seatResultList.get(index).getRowSeat().getMeeting()) {
					meetingName = seatResultList.get(index).getRowSeat().getMeeting().getName();
				}
				SeatResultPage page = new SeatResultPage();
				String hql0 = "from SeatPersonEntity where 1 = 1 AND SEAT_RESULT_ID = ? ";
				List<SeatPersonEntity> seatPersonEntityList = systemService.findHql(hql0,
						seatResultList.get(index).getId());
				page.setSeatPersonList(seatPersonEntityList);
				HSSFSheet sheet = workbook.getSheet("Sheet" + 1);

				int j = 1;
				for (int i = 0; i < seatPersonEntityList.size(); i++) {
					if (seatPersonEntityList.get(i) != null) {
						String depart = seatPersonEntityList.get(i).getPersonnel() == null ? ""
								: seatPersonEntityList.get(i).getPersonnel().getDepart().getShortName();
						if (StringUtil.isNotEmpty(seatPersonEntityList.get(i).getLeaderName())
								|| StringUtil.isNotEmpty(depart)) {
							if ("leaderSeat".equals(seatPersonEntityList.get(i).getSeatBase().getSeatType())) {
								this.getCell(sheet, j, 0)
										.setCellValue(seatPersonEntityList.get(i).getLeaderName() == null ? ""
												: seatPersonEntityList.get(i).getLeaderName()); 
							} else {
								this.getCell(sheet, j, 0).setCellValue(depart); 
							}
							if(null != seatPersonEntityList.get(i).getPersonnel()){
								this.getCell(sheet, j, 1).setCellValue(seatPersonEntityList.get(i).getPersonnel().getDepart().getDepartname()); 
							}
							this.getCell(sheet, j, 2).setCellValue(seatPersonEntityList.get(i).getLeader() == null
									? "" : seatPersonEntityList.get(i).getLeader().getJob()); 
							this.getCell(sheet, j, 3)
									.setCellValue(seatPersonEntityList.get(i).getSeatBase().getCode()); 
							this.getCell(sheet, j, 4)
									.setCellValue(seatPersonEntityList.get(i).getSeatBase().getSeatIp()); 
							this.getCell(sheet, j, 5)
									.setCellValue(seatPersonEntityList.get(i).getSeatBase().getCode()); 
/*							this.getCell(sheet, j, 5)
							.setCellValue(seatPersonEntityList.get(i).getSeatBase().getLabel()); 
*/							j++;
						}
					}
				}
				rowSeat = this.systemService.get(SeatEntity.class, rowSeat.getId());

				Integer issueSort = seatResultList.get(index).getMeetingIssue().getIssueSort();
				String sort = "";
				if (null != issueSort) {
					NumberChangeToChinese ncc = new NumberChangeToChinese();
					sort = ncc.numberToChinese(issueSort);
				}
				workbook.setSheetName(0, "議題" + sort);
				if (null != rowSeat) {
					codedFileName = rowSeat.getMeeting().getName() + "標題" + sort + "模板";
					meetingName = rowSeat.getMeeting().getName() + "模板";
				}
				xlsNameList.add(codedFileName);
				if (BrowserUtils.isIE(request) || BrowserUtils.checkBrowse(request).equals("Chrome")) {
					meetingName = URLEncoder.encode(meetingName, "UTF-8");
				} else {
					meetingName = new String(meetingName.getBytes("UTF-8"), "ISO-8859-1");
				}
				
				hssfWorkbookList.add(workbook);
				
			}
			// 2019.10.11需求變更:zip下載,一個標題導出一張excel
			try {
				response.setHeader("content-disposition", "attachment;filename=" + meetingName + ".zip");
				response.setContentType("application/x-zip-compressed");
				OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
				ZipOutputStream zipOut = new ZipOutputStream(toClient);
				for (int i = 0; i < hssfWorkbookList.size(); i++) {
					ZipEntry entry = new ZipEntry(xlsNameList.get(i) + ".xls");
					zipOut.putNextEntry(entry);
					hssfWorkbookList.get(i).write(zipOut);
				}
				zipOut.flush();
				zipOut.close();
			} catch (Exception e) {
				LogUtil.error(e.toString());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章