1.需要引入的maven依赖
|
<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();
}
}
}
}