1. 程式人生 > 其它 >POI生成excel,自定義excel樣式

POI生成excel,自定義excel樣式

POI建立excel有三種方式,分別為HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook HSSFWorkbook最多隻能匯出65533行資料,副檔名為xls XSSFWorkbook為了解決HSSFWorkbook行數限制問題,最大可匯出1048576行16384列,副檔名為xlsx,但是資料過大會導致記憶體佔用過多引入記憶體溢位等問題 SXSSFWorkbook可以通過程式設定,將超過指定行數的資料直接持久化到磁碟中,從而不影響記憶體 poi的行數和列數是從0開始,這裡在合併單元格的時候需要注意 下面通過程式碼實現建立excel、sheet、row、cell、單元格樣式、合併單元格
//建立excel
SXSSFWorkbook wb = new SXSSFWorkbook();
//壓縮臨時檔案
wb.setCompressTempFiles(true);
//定義檔名,如果需要資料夾,需要先建立資料夾,linux路徑為/path,windows路徑為\\path
String fileName = "xxx.xlsx";
File file = new File(fileName);
if (!file.exists()) {
    file.createNewFile();
}

createExcel(SXSSFWorkbook wb);

//轉化成檔案輸出流輸出到檔名的路徑中生成excel
OutputStream out = new FileOutputStream(file); wb.write(out); out.close(); //刪除寫入磁碟中的臨時檔案,最好放到finally中 wb.dispose();
public void createExcel(){
    SXSSFSheet sheet = wb.createSheet("sheet名");
    //設定sheet頁中的每行的寬度,可以根據下標進行定製
    for(int i = 0; i < 5; i++){
        sheet.setColumnWidth(i, 5000);
    }

    
//建立行 SXSSFRow row = sheet.createRow(rowNum++); //建立行內的單元格,需要從第一個單元格開始設定值,可以為null,一行多個值可以通過迴圈設定每行的值 SXSSFCell cell=row.createCell(i); cell.setCellValue("單元格內容"); //設定單元格樣式,如果對excel的樣式有要求,如字型、邊框、填充色等等 cell.setCellStyle(createStyle(wb)); }
public CellStyle createStyle(SXSSFWorkbook wb){
    CellStyle style = wb.createCellStyle();
    //設定字型
    style.setFont(getFont(wb));
    //設定對齊方式
    style.setAlignment(HorizontalAlignment.CENTER);
    //設定垂直對齊方式
    style.setVerticalAlignment(VerticalAlignment.CENTER);
    //設定是否鎖定
    style.setLocked(true);
    //設定是否自動換行
    style.setWrapText(false);
    //設定邊框
    style.setBorderBottom(BorderStyle.NONE);
    style.setBorderLeft(BorderStyle.NONE);
    style.setBorderTop(BorderStyle.NONE);
    style.setBorderRight(BorderStyle.NONE);
    return style;
}
public Font getFont(SXSSFWorkbook wb){
    Font font = workwbbook.createFont();
    font.setFontName("華文彩雲");
    font.setFontHeightInPoints((short) 60);
    font.setBold(true);
    font.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
    return font;
}
//合併單元格
//開始行 結束行 第幾列 顏色
public void mergeCell(SXSSFWorkbook workbook, SXSSFSheet sheet, int startRowIndex, int endRowIndex, int columnIndex, Short color){

        //設定合併單元格的樣式,不然合併後可能會丟失邊框,具體可以自己定義
    CellStyle style = workbook.createStyle();
    if(color != null) {
        //填充單元格
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //設定單元格背景色,可以參考HSSFColor.HSSFColorPredefined.BLACK.getIndex()
        style.setFillForegroundColor(color);
    }
    
    for(int i = startRowIndex; i <= endRowIndex; i++) {
        Row row = sheet.getRow(i);
        if(row == null){
            break;
        }
        Cell cell = row.getCell(columnIndex);
        cell.setCellStyle(style);
    }
}

最終效果

部落格連結:https://www.cnblogs.com/gqymy/