POI Excel 导出工具类
package com.hengyu.ticket.util;
import java.util.List;
import java.util.Map;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* excel处理
* @author LGF
* 2015-12-21
*/
public class ExcelHanlder {
//默认高度
private static short DEFAULT_ROW_HEIGHT = 400;
//默认宽度
private static int DEFAULT_CELL_WIDTH = 3000;
/**
*
* @param book 工作簿对象,【可选】
* @param hanlder 自定义类型处理【可选】
* @param titles 标题
* @param columns 列名(Map类型处理,自定义可选)
* @param columnsWidth 宽度
* @param height 行高
* @param sheetTitle 表标题
* @param datas 数据
* @return
*/
@SuppressWarnings("all")
public static XSSFWorkbook exportExcel(XSSFWorkbook book,ExcelTypeHanlder hanlder,String[] titles,String[] columns
,Integer[] columnsWidth,Short height,String sheetTitle,List datas){
if(book==null){
book = new XSSFWorkbook();
}
int size = DEFAULT_CELL_WIDTH;
//列大小
if(columnsWidth!=null&&columnsWidth.length==1){
size = columnsWidth[0];
}
if(height==null){
height = DEFAULT_ROW_HEIGHT;
}
XSSFSheet sheet = book.createSheet(sheetTitle);
int rowindex = 0;
XSSFRow firstrow = sheet.createRow(rowindex);
rowindex++;
sheet.setDefaultColumnWidth(size);
firstrow.setHeight(height);
XSSFFont font = book.createFont();
font.setBold(true);
XSSFCellStyle cellstyle = book.createCellStyle();
cellstyle.setFont(font);
cellstyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
//标题
if(titles!=null){
int index = 0;
for (String title : titles) {
XSSFCell cell = firstrow.createCell(index);
cell.setCellStyle(cellstyle);
cell.setCellValue(title);
//列宽度设置
if(columnsWidth==null||columnsWidth.length==0||columnsWidth.length==1){
sheet.setColumnWidth(cell.getColumnIndex(), size);
}else{
if((columnsWidth.length-1)>=index){
sheet.setColumnWidth(cell.getColumnIndex(), columnsWidth[index]==null?size:columnsWidth[index]);
}else{
sheet.setColumnWidth(cell.getColumnIndex(), size);
}
}
index++;
}
}
if(datas==null){
return book;
}
//写入数据
for (Object data : datas) {
//map 类型处理
if(data instanceof Map){
Map<String,Object> map = (Map<String, Object>) data;
XSSFRow row = sheet.createRow(rowindex);
int i = 0;
for (String column : columns) {
XSSFCell cell = row.createCell(i);
Object val = map.get(column);
if(hanlder!=null&&val==null){
Object temp = hanlder.dataNullHander(column,map);
cell.setCellValue(temp!=null?temp.toString():"");
}else{
cell.setCellValue(val!=null?val.toString():"");
}
i++;
}
row.setHeight(DEFAULT_ROW_HEIGHT);
rowindex++;
}else{
//其他处理
if(hanlder!=null){
Object obj = data;
XSSFRow row = sheet.createRow(rowindex);
hanlder.typeHanlder(data, row);
rowindex++;
}
}
}
return book;
}
/**
*
* @param book 工作簿对象,【可选】
* @param titles 标题
* @param columns 列名(Map类型处理,自定义可选)
* @param sheetTitle 表标题
* @param datas 数据
* @return
*/
public static XSSFWorkbook exportExcel(XSSFWorkbook book,String[] titles,String[] columns,String sheetTitle,List<Map<String,String>> datas){
return exportExcel(book, null, titles, columns,null,null, sheetTitle, datas);
}
/**
* @param titles 标题
* @param columns 列名(Map类型处理,自定义可选)
* @param sheetTitle 表标题
* @param datas 数据
* @return
*/
@SuppressWarnings("all")
public static XSSFWorkbook exportExcel(String[] titles,String[] columns,String sheetTitle,List<Map<String,String>> datas,ExcelTypeHanlder hanlder){
return exportExcel(null, hanlder, titles, columns,null,null, sheetTitle, datas);
}
public static XSSFWorkbook exportExcel(String[] titles,String[] columns,String sheetTitle,List<Map<String,String>> datas){
return exportExcel(null, null, titles, columns,null,null, sheetTitle, datas);
}
//自定义处理对象回调
public static abstract class ExcelTypeHanlder<T>{
//类型处理
public void typeHanlder(T data,XSSFRow row){
}
//空数据处理
public Object dataNullHander(String column,T obj){
return null;
}
}
}