POI匯出Excel檔案工具類
阿新 • • 發佈:2020-11-18
public class PoiExcelUtil {
public static void export(String title, List<String> keyList, List<String> fieldList, List<Map<String, Object>> dataList, HttpServletResponse response, String fileName) throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(fileName); CellStyle style1 = workbook.createCellStyle(); CellStyle style3 = workbook.createCellStyle(); CellStyle style2 = workbook.createCellStyle(); style1.setAlignment(CellStyle.ALIGN_CENTER); style1.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style2.setAlignment(CellStyle.ALIGN_CENTER); style2.setBorderBottom(CellStyle.BORDER_THIN); style2.setBorderTop(CellStyle.BORDER_THIN); style2.setBorderLeft(CellStyle.BORDER_THIN); style2.setBorderRight(CellStyle.BORDER_THIN); style2.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style2.setWrapText(true); style3.setAlignment(CellStyle.ALIGN_CENTER); style3.setBorderBottom(CellStyle.BORDER_THIN); style3.setBorderTop(CellStyle.BORDER_THIN); style3.setBorderLeft(CellStyle.BORDER_THIN); style3.setBorderRight(CellStyle.BORDER_THIN); style3.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style3.setDataFormat(workbook.createDataFormat().getFormat("@")); style3.setWrapText(true); Font font1 = workbook.createFont(); Font font2 = workbook.createFont(); Font font3 = workbook.createFont(); font1.setFontHeightInPoints((short) 18); font1.setFontName("宋體"); font1.setBoldweight(Font.BOLDWEIGHT_BOLD); font2.setFontHeightInPoints((short) 11); font2.setFontName("宋體"); font2.setBoldweight(Font.BOLDWEIGHT_BOLD); font3.setFontHeightInPoints((short) 10); font3.setFontName("宋體"); style1.setFont(font1); style2.setFont(font2); style3.setFont(font3); Row row = sheet.createRow(0); Cell cell = row.createCell(0, Cell.CELL_TYPE_STRING); cell.setCellStyle(style1); cell.setCellValue(title); CellRangeAddress region = new CellRangeAddress(0, 0, 0, fieldList.size()); RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, region, sheet, workbook); RegionUtil .setBorderLeft(CellStyle.BORDER_THIN, region, sheet, workbook); RegionUtil.setBorderRight(CellStyle.BORDER_THIN, region, sheet, workbook); RegionUtil.setBorderTop(CellStyle.BORDER_THIN, region, sheet, workbook); sheet.addMergedRegion(region); for (int i = 0; i < fieldList.size(); i++) { if (i == 0) { sheet.setColumnWidth(i, 30 * 256); } else { sheet.setColumnWidth(i, 20 * 256); } } row = sheet.createRow(1); for (int i = 0; i < fieldList.size(); i++) { cell = row.createCell(i, Cell.CELL_TYPE_STRING); cell.setCellStyle(style2); cell.setCellValue(fieldList.get(i)); } for (int i = 0; i < dataList.size(); i++) { row = sheet.createRow(i + 2); Map<String, Object> dataMap = dataList.get(i); for (int j = 0; j < keyList.size(); j++) { cell = row.createCell(j, Cell.CELL_TYPE_STRING); cell.setCellValue(MapUtils.getString(dataMap, keyList.get(j), "-")); cell.setCellStyle(style3); } } response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", "attachment; filename =" + URLEncoder.encode(fileName + ".xlsx", "utf-8")); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.close(); }
}