java語言將數據導出成excel代碼

1.需要引入的maven依賴
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>3.9</version>
		    </dependency>
		<dependency>
		  <groupId>org.apache.poi</groupId>
		  <artifactId>com.springsource.org.apache.poi</artifactId>
		  <version>3.9.0.FINAL</version>
		</dependency>
2.具體的代碼如下
package com.bj58.jxedt.app.util;

import java.io.File;
import java.io.FileOutputStream;

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.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;

/**
 * 該類爲數據導出成excel工具類
 * @version 2017/08/23
 * @author gongxiaohai
 *
 */
public class ExportExcelUtil {

	/**
	 * 創建一個excel文件
	 */
	private HSSFWorkbook wb = null;
	
	/**
	 * 創建一個excel工作表
	 */
	private HSSFSheet sheet = null;
	
	/**
	 * 無參構造函數
	 */
	public ExportExcelUtil() {
		this(new HSSFWorkbook());
	}
	
	/**
	 * 一個參數的構造函數(ps:不存在只有sheet的構造函數,因爲sheet是從wb中創建而來的)
	 * @param wb
	 */
	public ExportExcelUtil(HSSFWorkbook wb){
		this(wb,wb.createSheet());
	}
	
	/**
	 * 雙參構造函數
	 * @param wb		excel文件
	 * @param sheet		工作表
	 */
	public ExportExcelUtil(HSSFWorkbook wb,HSSFSheet sheet){
		this.wb = wb;
		this.sheet = sheet;
	}
	
	/**
	 * @return 		wb
	 */
	public HSSFWorkbook getWb() {
		return wb;
	}

	/**
	 * @param wb	set wb to this.wb
	 */
	public void setWb(HSSFWorkbook wb) {
		this.wb = wb;
	}

	/**
	 * @return		sheet
	 */
	public HSSFSheet getSheet() {
		return sheet;
	}

	/**
	 * @param sheet		set sheet to this.sheet
	 */
	public void setSheet(HSSFSheet sheet) {
		this.sheet = sheet;
	}
	
	/**
	 * 創建通用excel頭部
	 * @param headString	頭部顯示的字符串
	 * @param colSum		該報表列數
	 */
	public void createNormalHead(String headString,int colSum){
		HSSFRow row = sheet.createRow(0);
		//設置第一行
		HSSFCell cell = row.createCell(0);
		
		//合併第一行前colSum列
		sheet.addMergedRegion(new CellRangeAddress(0,0,0,colSum - 1));
		//CellRangeAddress類用來替代org.apache.poi.hssf.util.Region,sheet中使用Region的一系列方法都已過期。
		//CellRangeAddress中四個參數的意思爲,以參數爲1,2,3,4爲例:將從第0行到第1行,從第2列到第3列的單元格合併。
		
		//定義單元格爲字符串類型
		cell.setCellType(HSSFCell.ENCODING_UTF_16);//中文處理
		cell.setCellValue(new HSSFRichTextString(headString));//設置單元格的值
		
		//定義單元格格式,添加單元格表樣式,並添加到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		//設置單元格對齊類型
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//指定單元格水平居中對齊
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//指定單元格垂直居中對齊
		cellStyle.setWrapText(true);//指定單元格自動換行
		cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);//設置左邊框顏色
		cellStyle.setBorderLeft((short)1);//設置左邊框大小
		cellStyle.setRightBorderColor(HSSFColor.BLACK.index);//設置右邊框顏色
		cellStyle.setBorderRight((short)1);//設置右邊框大小
		
		//設置單元格字體
		HSSFFont font = wb.createFont();
		
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//設置內容加粗
		font.setFontName("宋體");//設置字體
		font.setFontHeight((short)600);//設置字體高度
		//font.setFontHeightInPoints((short)10);//設置字體大小
		
		cellStyle.setFont(font);
		cell.setCellStyle(cellStyle);
		
	}
	
	/**
	 * 創建通用excel第二行
	 * @param params	用來表示第二行中小標題內容的數組
	 */
	public void createNormalTwoRow(String[] params){
		//創建第二行
		HSSFRow row = sheet.createRow(1);
		row.setHeight((short)400);
		
		HSSFCell cell = row.createCell(0);
		
		cell.setCellType(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(new HSSFRichTextString("" + ""));
		
		
		//定義單元格格式,添加單元格樣式表,並添加到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設置單元格水平居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設置單元格垂直居中
		cellStyle.setWrapText(true);//設置單元格自動換行
		
		//設置單元格字體
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋體");
		font.setFontHeight((short)250);
		
		cell.setCellStyle(cellStyle);
		
		for(int i = 0 ; i < params.length ; i ++){
			cell = row.createCell(i);
			
			cell.setCellValue(params[i]);
		}
	}
	
	/**
	 * 設置工作表列寬
	 * @param arg	每列寬度
	 */
	public void setSheetColumnWidth(int arg[]) throws Exception{
		for(int i = 0 ;i < arg.length; i ++ ){
			//設置工作表列寬
			sheet.setColumnWidth(i, arg[i]);
		}
	}
	/**
	 * 設置excel標題
	 * @param columHeader	標題字符串數組
	 */
	public void createColumHeader(String[] columHeader){
		
		//設置列頭,在第三行
		HSSFRow row = sheet.createRow(2);
		
		//指定行高
		row.setHeight((short)600);
		
		//設置單元格格式,添加單元格樣式,並添加到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設置單元格水平居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設置單元格垂直居中
		cellStyle.setWrapText(true);//設置單元格自動換行
		
		//單元格字體
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//設置字體加粗
		font.setFontName("宋體");//設置字體格式
		font.setFontHeight((short)250);
		cellStyle.setFont(font);
		
		//設置單元格背景色
		cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		
		HSSFCell cell = null;
		
		//從第二行開頭開始創建單元格,並給每一個單元格賦值
		for(int item = 0 ; item < columHeader.length; item ++){
			cell = row.createCell(item);
			cell.setCellType(HSSFCell.ENCODING_UTF_16);
			cell.setCellStyle(cellStyle);
			cell.setCellValue(new HSSFRichTextString(columHeader[item]));
		}
	}
	
	/**
	 * 創建內容單元格
	 * @param wb		HSSFWorkbook
	 * @param row		HSSFRow
	 * @param col		short型的列索引
	 * @param align		對齊方式
	 * @param val		列值
	 */
	public void createCell(HSSFWorkbook wb,HSSFRow row,int col,short align,String val){
		//根據該行的第幾列創建單元格
		HSSFCell cell = row.createCell(col);
		//設置單元格格式
		cell.setCellType(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(new HSSFRichTextString(val));//設置單元格值
		
		//設置單元格樣式,添加樣式到工作簿
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(align);//設置單元格對齊
		cell.setCellStyle(cellStyle);
	}
	
	/**
	 * 創建合計行
	 * @param colSum		需要合併到的列索引
	 * @param cellValue		列值
	 */
	public void createLastSumRow(int colSum,String[] cellValue){
		
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設置單元格水平居中
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設置單元格垂直居中
		cellStyle.setWrapText(true);//設置單元格自動換行
		
		//單元格字體
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋體");
		font.setFontHeight((short)250);
		cellStyle.setFont(font);
		
		//獲取工作表最後一行
		HSSFRow lastRow = sheet.createRow((short)(sheet.getLastRowNum() + 1));
		HSSFCell sumCell = lastRow.createCell(0);
		
		sumCell.setCellValue("合計");//設置單元格內容
		sumCell.setCellStyle(cellStyle);
		
		//合併  最後一行的第零列 至 最後一行的第一列
		sheet.addMergedRegion(new CellRangeAddress(sheet.getLastRowNum(),sheet.getLastRowNum() - 1
				,sheet.getLastRowNum(),colSum));
		
		for(int item = 2 ; item < (cellValue.length + 2) ; item++){
			//定義最後一行的第三列
			sumCell = lastRow.createCell(item);
			sumCell.setCellStyle(cellStyle);
			
			//定義數組,從0開始
			sumCell.setCellValue(new HSSFRichTextString(cellValue[item - 2]));
		}
	}
	
	/**
	 * 將數據輸入到excel文件
	 * @param fileName		文件名
	 */
	public void outputExcel(String fileName){
		//定義文件輸出流
		FileOutputStream fos = null;
		try{
			fos = new FileOutputStream(new File(fileName));
			wb.write(fos);//將數據寫入文件中
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			//防止資源的浪費,保證了即使出錯也會回收資源
			try{
				fos.close();
			}catch(Exception e2){
				e2.printStackTrace();
			}
		}
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章