1. 程式人生 > 實用技巧 >POI匯出Excel檔案工具類

POI匯出Excel檔案工具類

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

}