1. 程式人生 > 實用技巧 >Poi使用SXSSFWorkbook方式匯出Excel工具類

Poi使用SXSSFWorkbook方式匯出Excel工具類

/**
*

  • 功能描述:
  • @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;
}

}