【工具類】Excel導出那些事兒(五)

接上一篇博客,繼續介紹雙標題導出.

/**
 * 雙標題excel導出
 * @param response
 * @param fileName 文件名
 * @param sheetName sheet頁名
 * @param firstTitle 第一行表頭標題 
 * @param title  第二行標題
 * @param content 每一列對應值
 * @param list 單元格下拉選項(可根據具體需求去留)
 */
public static void exportForTwoTitle(HttpServletResponse response, String fileName, String sheetName, String firstTitle, String[] title, String[][] content, List<T> list) {
    XSSFWorkbook wb = new XSSFWorkbook();
    OutputStream os = null;
    try {
        wb = exportXlsForTwoTitle(sheetName, firstTitle,title, content, wb,list);
        ExcelUtil.setResponse(response, fileName);
        os = response.getOutputStream();
        wb.write(os);
        os.flush();
    } catch (Exception e) {
        logger.error("io error");
    } finally {
        try {
            wb.close();
            if (os != null) {
                os.close();
            }
        } catch (Exception e) {
            logger.error("close io error");
        }
    }
}

/**
 * 導出Excel(雙標題)
 *
 * @param sheetName sheet名稱
 * @param title     標題
 * @param values    內容
 * @param wb        HSSFWorkbook對象
 * @return
 */
public static XSSFWorkbook exportXlsForTwoTitle(String sheetName, String firstTitle, String[] title, String[][] values, XSSFWorkbook wb,List<T> list) {

    // 第一步,創建一個HSSFWorkbook,對應一個Excel文件
    if (wb == null) {
        wb = new XSSFWorkbook();
    }

    // 第二步,在workbook中添加一個sheet,對應Excel文件中的sheet
    XSSFSheet sheet = wb.createSheet(sheetName);
    //設置默認列寬
    sheet.setDefaultColumnWidth(20);
    // 第四步,創建單元格,並設置值表頭 設置表頭居中
    XSSFCellStyle style = wb.createCellStyle();
    // 創建一個居中格式
    style.setAlignment(HorizontalAlignment.CENTER);
    //設置文本格式
    XSSFDataFormat format = wb.createDataFormat();
    style.setDataFormat(format.getFormat("@"));
    // 第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制
    XSSFRow row0 = sheet.createRow(0);
    row0.setHeightInPoints(175);
    //sheet.autoSizeColumn(1, true);
    XSSFCellStyle style0 = wb.createCellStyle();
    // 創建一個居中格式
    style0.setAlignment(HorizontalAlignment.LEFT);
    // 自動換行
    style0.setWrapText(true);
    // 生成一個字體
    XSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short) 11);
    font.setColor(HSSFColor.ROYAL_BLUE.index);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
    font.setFontName("仿宋_GB2312");

    // 把字體 應用到當前樣式
    style0.setFont(font);
    XSSFCell cell0 = row0.createCell(0);
    // 單元格合併
    CellRangeAddress region = new CellRangeAddress(0,0, 0,9 );
    sheet.addMergedRegion(region);
    cell0.setCellValue(firstTitle);
    cell0.setCellStyle(style0);
    XSSFRow row = sheet.createRow(1);
    XSSFCell cell;
    //創建標題
    for (int i = 0; i < title.length; i++) {
        cell = row.createCell(i);
        cell.setCellValue(title[i]);
        cell.setCellStyle(style);
    }
	//設置某一列字段的下拉框值選項
    String[] typeList = Type.getAllEnum().toArray(new String[]{});
    XSSFDataValidation dataValidationType = setColumnList(sheet,typeList,1);
    if (dataValidationType != null) {
        sheet.addValidationData(dataValidationType);
    }

    //********************************************************
    //創建內容
    if(values != null && values.length >0){
        //創建內容
        for (int i = 0; i < values.length; i++) {
            row = sheet.createRow(i + 2);
            for (int j = 0; j < values[i].length; j++) {
                //將內容按順序賦給對應的列對象
                cell = row.createCell(j);
                cell.setCellStyle(style);
                cell.setCellValue(values[i][j]);
                cell.setCellType(XSSFCell.CELL_TYPE_STRING);
            }
        }
    }
    return wb;
}

/**
 * 設置指定字段下拉選項
 * @param sheet 當前sheet
 * @param textList 下拉選項
 * @param colNum 第幾列
 * @return
 */
public static XSSFDataValidation setColumnList(XSSFSheet sheet, String[] textList, int colNum) {
    XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
    XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
            .createExplicitListConstraint(textList);
    CellRangeAddressList addres = new CellRangeAddressList(1,65536,colNum,colNum);
    XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(
            dvConstraint, addres);
    validation.setSuppressDropDownArrow(true);
    return validation;
}

 

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