html代碼:
/** * 業務數據信息下載 * * @param response * @param fundReconciliationQueryVo * @param request */ @RequestMapping(value = "/downloadBusinessInfo") public ResponseEntity<byte[]> downloadBusinessInfo(HttpServletResponse response, FundReconciliationQueryVo fundReconciliationQueryVo, HttpServletRequest request) { ResponseEntity<byte[]> responseEntity = null; //獲取前台額外傳遞過來的查詢條件 if (log.isDebugEnabled()) { log.debug("fundReconciliationQueryVo:{}", fundReconciliationQueryVo); } try { String fileName = "businessInfoModel.xlsx"; ClassPathResource resource = new ClassPathResource(fileName); InputStream inputStream = resource.getInputStream(); Workbook workbook = ReadExcelUtil.getWorkbook(inputStream, fileName); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); List<BusinessDataDto> businessInfoList = fundReconciliationService.downloadBusinessInfo(fundReconciliationQueryVo); for (BusinessDataDto businessDataDto : businessInfoList) { if ("1".equals(businessDataDto.getAccountStatus())) { businessDataDto.setAccountStatus("已確認"); } else if ("2".equals(businessDataDto.getAccountStatus())) { businessDataDto.setAccountStatus("需要處理"); } else if ("3".equals(businessDataDto.getAccountStatus())) { businessDataDto.setAccountStatus("已收賬"); } else { businessDataDto.setAccountStatus("未匹配"); } } //生成EXCEL XLSX格式 this.businessInfoExportData(workbook, businessInfoList, byteArrayOutputStream); String downFileName = java.net.URLEncoder.encode("業務數據信息.xlsx", "UTF-8"); //設置響應頭讓瀏覽器正確顯示下載 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", downFileName); responseEntity = new ResponseEntity<>(byteArrayOutputStream.toByteArray(), headers, HttpStatus.OK); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return responseEntity; }
public static Workbook getWorkbook(InputStream is, String fileName) throws IOException { Workbook workbook = null; try { if (fileName.endsWith(EXTENSION_XLS)) { workbook = new HSSFWorkbook(is); } else if (fileName.endsWith(EXTENSION_XLSX)) { workbook = new XSSFWorkbook(is); } } catch (FileNotFoundException e) { throw e; } catch (IOException e) { throw e; } finally { is.close(); }
public void businessInfoExportData(Workbook workbook, List<BusinessDataDto> businessInfoList, OutputStream outputStream) { //EXCEL列 List<List<Object>> rows = new ArrayList<>(); //從給定數據獲取指定列作為EXCEL列數據 for (BusinessDataDto businessDataDto : businessInfoList) { List<Object> row = new ArrayList<>(); //序號 row.add(businessDataDto.getIndexNum()); //發票抬頭 row.add(businessDataDto.getName()); //報銷單號 row.add(businessDataDto.getReportNo()); //單號 row.add(businessDataDto.getBillsNo()); //結算金額 row.add(new BigDecimal(businessDataDto.getOrderAmount()).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); //支付時間 if (Lang.isEmpty(businessDataDto.getAtsPayDate())) { row.add(businessDataDto.getAtsPayDate()); } else { row.add(DateUtils.formatDate(businessDataDto.getAtsPayDate(), GlobalContants.DateFormat.YYYY_MM_DD_HH_MM_SS)); } //狀態 row.add(businessDataDto.getAccountStatus()); rows.add(row); } XSSFWorkbook xwb = excelService.businessAndFinancialInfoExcelForXLSX(workbook, rows); try { xwb.write(outputStream); outputStream.flush(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { xwb.close(); } catch (Exception e) { e.printStackTrace(); } } }
excelService
/** * 業務數據信息/財務到賬信息下載 * @param rows 數據行 * @return */ public XSSFWorkbook businessAndFinancialInfoExcelForXLSX(Workbook workbook, List<List<Object>> rows) { XSSFWorkbook xwb = (XSSFWorkbook) workbook; XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0); //設置字體 XSSFFont font = xwb.createFont(); font.setFontName("宋體");//設置字體名稱 font.setFontHeightInPoints((short)12);//設置字號 //設置單元格格式 XSSFCellStyle style = xwb.createCellStyle(); style.setFont(font); style.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 居中 style.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); //垂直居中 style.setWrapText(true);//自動換行 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下邊框 style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 // 寫入數據行 XSSFRow row;//行 XSSFCell cell;//單元格 int rowIdx = 1; for(List<Object> dr : rows) { row = sheet.createRow(rowIdx); for(int di=0; di < dr.size(); di++) { cell = row.createCell(di); cell.setCellStyle(style); String cellValue = ""; if(Lang.isEmpty(dr.get(di))){ cellValue = ""; }else{ cellValue = dr.get(di)+""; } cell.setCellValue(new XSSFRichTextString(cellValue)); } rowIdx ++; } return xwb; }