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

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

/**
*

  • 功能描述:
  • @Package: com.utils.excel.poiexcel
    */
    package com.utils.excel.poiexcel;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
*

  • @ClassName: PoiExcelUtil.java
  • @Description: 匯出Excel採用HSSFWorkbook實現方式 excel為03以前的版本,只支援.xls格式 提供了單sheet頁,多個sheet頁方法
  • @deprecated 不建議使用此方法了,建議使用下邊的PoiSXSSFWorkbookExcel.java工具類

*/
public class PoiExcelUtil {

/**
 * 
 * 匯出Excel 簡單匯出 單個sheet頁 資料量不大的可以使用
 * 
 * @param sheetName
 *            sheet名稱
 * @param title
 *            標題
 * @param content
 *            內容
 * @return wb
 *            HSSFWorkbook物件
 * 
 */

public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] content) {

	// 第一步 建立一個HSSFWorkbook, 對應一個Excel檔案
	HSSFWorkbook wb = new HSSFWorkbook();
	// 宣告一個工作薄
	// wb.createInformationProperties();
	// wb.getDocumentSummaryInformation().setCompany("*****公司");
	// SummaryInformation si = wb.getSummaryInformation();
	// si.setAuthor("JACK"); //填加xls檔案作者資訊
	// si.setApplicationName("匯出程式"); //填加xls檔案建立程式資訊
	// si.setLastAuthor("最後儲存者資訊"); //填加xls檔案最後儲存者資訊
	// si.setComments("JACK is a programmer!"); //填加xls檔案作者資訊
	// si.setTitle("POI匯出Excel"); //填加xls檔案標題資訊
	// si.setSubject("POI匯出Excel");//填加檔案主題資訊
	// si.setCreateDateTime(new Date());

	// 第二步, 在workbook中新增一個sheet,對應excel檔案中的sheet
	HSSFSheet sheet = wb.createSheet(sheetName);
	// sheet.setColumnWidth(2, 100);//設定某一個下標的列寬
	// sheet.setDefaultColumnStyle(column, style);//設定某一列的預設樣式
	// sheet.setDefaultColumnWidth(20);//設定所有列的列寬
	// sheet.setColumnHidden(columnIndex, hidden);//設定某一列是否隱藏
	// sheet.setDefaultRowHeight((short)(30*20));//設定行高60
	// sheet.setDefaultRowHeightInPoints(30);//設定行高30

	// 合併單元格CellRangeAddress構造引數依次表示起始行,截至行,起始列, 截至列
	// CellRangeAddress region1=new CellRangeAddress(0, 0, 0, 2);
	// CellRangeAddress region2=new CellRangeAddress(1, 1, 0, 2);
	// sheet.addMergedRegion(region1);
	// sheet.addMergedRegion(region2);

	// 第三步,在sheet中新增表頭第0行,注意老版本poi對Excel的行數列數有限制,引數為行索引(excel的行),可以是0~65535之間的任何一個
	int rownum = 0;
	HSSFRow row = sheet.createRow(rownum);

	// 第四步,建立單元格,並設定表頭 設定表頭居中
	// 給表還是單元格還是列可以自己設定並獲取到需要的樣式titlestyle cellstyle
	HSSFCellStyle titlestyle = getAndSetHSSFCellStyleHeader(wb);
	
	// 宣告列物件,引數為列索引,可以是0~255之間的任何一個
	HSSFCell cell;
	// 建立標題,此時row=0,即第一行
	for (int i = 0; i < title.length; i++) {
		cell = row.createCell(i);
		cell.setCellValue(title[i]);
		cell.setCellStyle(titlestyle);
	}
	// 第二行
	rownum++;
	HSSFRow row02 = sheet.createRow(rownum);
	HSSFCell cell_row02 = row02.createCell(0);
	cell_row02.setCellValue("總數:" + (content.length) + ",匯出時間:" + new Date().toLocaleString());
	// 設定小標題樣式
	cell_row02.setCellStyle(titlestyle);

	// 建立內容 第三行
	for (int i = 0; i < content.length; i++) {
		String str = ",";
		row = sheet.createRow(i + 2);
		for (int j = 0; j < content[i].length; j++) {
			// 將內容按照順序賦給對應的列物件
			row.createCell(j).setCellValue(String.valueOf(content[i][j]));
		}
	}
	return wb;
}

/**
 * 
 * 匯出Excel 多個sheet頁   每個sheet頁表頭內容不同
 * 
 * @param sheetNum
 *            sheet頁
 * @param sheetTitle
 *            sheet頁名稱
 * @param title
 *            標題
 * @param List<List<String>> result
 *            匯出資料內容
 * @return wb
 *            HSSFWorkbook物件
 * @throws IOException
 * 
 */

public static HSSFWorkbook getsheetsHSSFWorkbook(HSSFWorkbook wb, int sheetNum, String sheetTitle, String[] title,
		List<List<String>> result) {

	HSSFSheet sheet = wb.createSheet();
	wb.setSheetName(sheetNum, sheetTitle);
	int rownum = 0;
	HSSFRow row = sheet.createRow(rownum);
	// 設定並獲取到需要的樣式
	HSSFCellStyle titlestyle = getAndSetHSSFCellStyleHeader(wb);
	// 宣告列物件,引數為列索引,可以是0~255之間的任何一個
	HSSFCell cell;
	// 建立標題,此時row=0,即第一行
	for (int i = 0; i < title.length; i++) {
		cell = row.createCell(i);
		cell.setCellValue(title[i]);
		cell.setCellStyle(titlestyle);
	}
	/*// 第二行
	rownum++;
	HSSFRow row02 = sheet.createRow(rownum);
	HSSFCell cell_row02 = row02.createCell(0);
	cell_row02.setCellValue("總數:" + (result.size()) + ",匯出時間:" + new Date().toLocaleString());
	// 設定小標題樣式
	cell_row02.setCellStyle(titlestyle);*/

	// 建立內容 第三行
	// 遍歷集合資料,產生資料行
	if (result != null) {
		int index = 1;
		for (List<String> m : result) {
			row = sheet.createRow(index);
			int cellIndex = 0;
			for (String str : m) {
				row.createCell((short) cellIndex).setCellValue(str);
				cellIndex++;
			}
			index++;
		}
	}
	return wb;
}

/**
 * 
 * 匯出Excel 資料量過多的話放入多個sheet頁中
 * 每個sheet頁目前設定為60000
 * 
 * @param title
 *            標題
 * @param List<List<String>> result
 *            匯出資料內容
 * @return wb
 *            HSSFWorkbook物件
 * @throws IOException
 * 
 */

public static HSSFWorkbook getManySheets(String[] title, List<List<String>> result) {
	HSSFWorkbook wb = new HSSFWorkbook();
	// sheet名
	String sheetTitle = "業務清單";
	int sheetNum = 0;// 記錄額外建立的sheet數量
	HSSFSheet sheet = wb.createSheet(sheetTitle + sheetNum);
	// wb.setSheetName(sheetNum, sheetTitle+sheetNum);
	int rownum = 0;
	HSSFRow row = sheet.createRow(rownum);
	
	// 設定並獲取到需要的樣式
	HSSFCellStyle titlestyle = getAndSetHSSFCellStyleHeader(wb);
	
	HSSFCell cell;
	// 建立標題,此時row=0,即第一行
	for (int j = 0; j < title.length; j++) {
		cell = row.createCell(j);
		cell.setCellValue(title[j]);
		cell.setCellStyle(titlestyle);
	}

	// 遍歷集合資料,建立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(titlestyle);
				}
				
			}
			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 HSSFCellStyle getAndSetHSSFCellStyleHeader(HSSFWorkbook wb) {
	HSSFCellStyle hssfCellStyle = wb.createCellStyle();
	// 建立一個居中格式
	hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	// 設定字型
	HSSFFont font = wb.createFont();
	font.setFontName("楷體");
	font.setFontHeightInPoints((short) 12);
	font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
	hssfCellStyle.setFont(font);
	// 建立邊框物件
	HSSFCellStyle setBorder = wb.createCellStyle();
	// 設定自動換行
	setBorder.setWrapText(true);
    return hssfCellStyle;
}

}