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();
}
}
}
}