POI生成excel,自定義excel樣式
阿新 • • 發佈:2021-08-13
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); //轉化成檔案輸出流輸出到檔名的路徑中生成excelOutputStream 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/