按模板下载excel
Posted luoxianwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按模板下载excel相关的知识,希望对你有一定的参考价值。
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; }
以上是关于按模板下载excel的主要内容,如果未能解决你的问题,请参考以下文章