Poi使用SXSSFWorkbook方式匯出Excel工具類
阿新 • • 發佈:2020-11-03
/**
*
- 功能描述:
- @Package: com.utils.excel.poiexcel
- @author: l
*/
package com.utils.excel.poiexcel;
import java.io.IOException;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
/**
*
- @ClassName: PoiSXSSFWorkbookExcel.java
- @Description: 匯出Excel 採用SXSSFWorkbook實現方式 excel為07之後版本,只支援.xlsx格式
- @author: l
*/
public class PoiSXSSFWorkbookExcel {
/** * 匯出到單個sheet頁中 * @param title * 標題 * @param List<List<String>> result * 匯出資料內容 * @return wb * SXSSFWorkbook物件 * @throws IOException * */ public static SXSSFWorkbook getSxssfwbExcel(String sheetTitle,String[] title, List<List<String>> result) { SXSSFWorkbook wb = new SXSSFWorkbook(); //int sheetNum = 0;// 記錄額外建立的sheet數量 Sheet sheet = wb.createSheet(sheetTitle); // wb.setSheetName(sheetNum, sheetTitle+sheetNum); int rownum = 0; Row row = sheet.createRow(rownum); // 設定並獲取到需要的樣式 XSSFCellStyle xssfCellStyleHeader = getAndSetXSSFCellStyleHeader(wb); Cell cell; // 建立標題,此時row=0,即第一行 for (int j = 0; j < title.length; j++) { cell = row.createCell(j); cell.setCellValue(title[j]); cell.setCellStyle(xssfCellStyleHeader); } // 遍歷集合資料,建立excel內容,產生資料行 if (result != null) { int index = 1; List<String> m = null; for (int i = 0; i < result.size(); i++) { row = sheet.createRow(index); int cellIndex = 0; m = result.get(i); for (String str : m) { row.createCell((short) cellIndex).setCellValue(str); cellIndex++; } index++; } } return wb; } /** * 每個sheet頁匯出不同內容到多個sheet頁中,每個sheet頁表頭內容不相同 * * @param wb * SXSSFWorkbook物件 * @param sheetNum * sheet頁 * @param sheetTitle * sheet頁名稱 * @param title * 標題 * @param List<List<String>> result * 匯出資料內容 * @return wb * SXSSFWorkbook物件 * @throws IOException * */ public static SXSSFWorkbook getSxssfwbManyDiffSheets(SXSSFWorkbook wb, int sheetNum, String sheetTitle, String[] title, List<List<String>> result) { Sheet sheet = wb.createSheet(); wb.setSheetName(sheetNum, sheetTitle); int rownum = 0; Row row = sheet.createRow(rownum); // 設定並獲取到需要的樣式 XSSFCellStyle xssfCellStyleHeader = getAndSetXSSFCellStyleHeader(wb); Cell cell; // 建立標題,此時row=0,即第一行 for (int j = 0; j < title.length; j++) { cell = row.createCell(j); cell.setCellValue(title[j]); cell.setCellStyle(xssfCellStyleHeader); } // 遍歷集合資料,建立excel內容,產生資料行 if (result != null) { int index = 1; List<String> m = null; for (int i = 0; i < result.size(); i++) { row = sheet.createRow(index); int cellIndex = 0; m = result.get(i); for (String str : m) { row.createCell((short) cellIndex).setCellValue(str); cellIndex++; } index++; } } return wb; } /** * 每個sheet頁匯出相同內容到多個sheet頁中,每個sheet頁表頭內容相同 * 每個sheet頁目前總數設定為n,這裡設定n=60000 * @param title * 標題 * @param List<List<String>> result * 匯出資料內容 * @return wb * SXSSFWorkbook物件 * @throws IOException * */ public static SXSSFWorkbook getSxssfwbManySameSheets(String sheetTitle,String[] title, List<List<String>> result) { SXSSFWorkbook wb = new SXSSFWorkbook(); int sheetNum = 0;// 記錄額外建立的sheet數量 Sheet sheet = wb.createSheet(sheetTitle + sheetNum); // wb.setSheetName(sheetNum, sheetTitle+sheetNum); int rownum = 0; Row row = sheet.createRow(rownum); // 設定並獲取到需要的樣式 XSSFCellStyle xssfCellStyleHeader = getAndSetXSSFCellStyleHeader(wb); Cell cell; // 建立標題,此時row=0,即第一行 for (int j = 0; j < title.length; j++) { cell = row.createCell(j); cell.setCellValue(title[j]); cell.setCellStyle(xssfCellStyleHeader); } // 遍歷集合資料,建立excel內容,產生資料行 if (result != null) { List<String> m = null; for (int i = 0; i < result.size(); i++) { if ((i + 1) % 60000 == 0) { sheetNum++; sheet = wb.createSheet(sheetTitle + sheetNum); row = sheet.createRow(0); // 宣告列物件,引數為列索引,可以是0~255之間的任何一個 // 建立標題,此時row=0,即第一行 for (int j = 0; j < title.length; j++) { cell = row.createCell(j); cell.setCellValue(title[j]); cell.setCellStyle(xssfCellStyleHeader); } } row = sheet.createRow((i + 1) - (sheetNum * 60000)+sheetNum); int cellIndex = 0; m = result.get(i); for (String str : m) { row.createCell((short) cellIndex).setCellValue(str); cellIndex++; } } } return wb; } /** * 獲取並設定header樣式 */ private static XSSFCellStyle getAndSetXSSFCellStyleHeader(SXSSFWorkbook sxssfWorkbook) { XSSFCellStyle xssfCellStyle = (XSSFCellStyle) sxssfWorkbook.createCellStyle(); Font font = sxssfWorkbook.createFont(); // 字型大小 font.setFontHeightInPoints((short) 14); // 字型粗細 font.setBoldweight((short) 20); font.setFontName("楷體"); // 將字型應用到樣式上面 xssfCellStyle.setFont(font); // 是否自動換行 xssfCellStyle.setWrapText(false); // 水平居中 xssfCellStyle.setAlignment(HorizontalAlignment.CENTER); // 垂直居中 xssfCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); return xssfCellStyle; }
}