/*
*
* 文件名:ExportExcelUtil.java
* 版权:Copyright HNNE All Rights Reserved.
* 描述:
* 修改人:jyy
* 修改时间:2016年8月1日
* 修改内容:
*/
package com.matrix.system.hive.plugin.util;
import com.matrix.core.tools.StringUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author jyy
* @version 1.0, 2016年8月1日
*/
public class ExcelUtil {
Logger log = Logger.getLogger(this.getClass());
// 2007 版本以上 最大支持1048576行
public final static String EXCEl_FILE_2007 = "2007";
// 2003 版本 最大支持65536 行
public final static String EXCEL_FILE_2003 = "2003";
/**
*
* 导出无头部标题行Excel
* 时间格式默认:yyyy-MM-dd hh:mm:ss
*
*
* @param title
* 表格标题
* @param dataset
* 数据集合
* @param out
* 输出流
* @param version
* 2003 或者 2007,不传时默认生成2003版本
* @param hasNum
* 是否有序号
*/
public ByteArrayInputStream exportExcel(String title, Collection> dataset, OutputStream out, String version,
boolean isMerg, List mergParm, boolean hasNum) {
if (StringUtils.isBlank(version) || EXCEL_FILE_2003.equals(version.trim())) {
return exportExcel2003(title, null, dataset, "yyyy-MM-dd hh:mm:ss", isMerg, mergParm, hasNum);
} else {
return exportExcel2007(title, null, dataset, "yyyy-MM-dd hh:mm:ss", isMerg, mergParm, null);
}
}
/**
*
* 导出带有头部标题行的Excel
* 时间格式默认:yyyy-MM-dd hh:mm:ss
*
*
* @param title
* 表格标题
* @param headers
* 头部标题集合
* @param dataset
* 数据集合
* @param out
* 输出流
* @param version
* 2003 或者 2007,不传时默认生成2003版本
* @param hasNum
* 是否有序号
*/
public ByteArrayInputStream exportExcel(String title, String[] headers, Collection> dataset, String version,
boolean isMerg, List mergParm, boolean hasNum) {
if (StringUtils.isBlank(version) || EXCEL_FILE_2003.equals(version.trim())) {
return exportExcel2003(title, headers, dataset, "yyyy-MM-dd hh:mm:ss", isMerg, mergParm, hasNum);
} else {
return exportExcel2007(title, headers, dataset, "yyyy-MM-dd hh:mm:ss", isMerg, mergParm, null);
}
}
/**
*
* 通用Excel导出方法,利用反射机制遍历对象的所有字段,将数据写入Excel文件中
* 此版本生成2007以上版本的文件 (文件后缀:xlsx)
*
*
* @param title
* 表格标题名
* @param headers
* 表格头部标题集合
* @param dataset
* 需要显示的数据集合,集合中一定要放置符合JavaBean风格的类的对象。此方法支持的
* JavaBean属性的数据类型有基本数据类型及String,Date
* @param out
* 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
* @param pattern
* 如果有时间数据,设定输出格式。默认为"yyyy-MM-dd hh:mm:ss"
* @param isMerg
* 是否需要合并单元格
* @param mergParm
* 合并单元格参数
* @param cols
* 要生成excel列数
* @param headerRows
* 要生成的excel表头的行数
* @param list
* 表头列字符串参数(Map)String表头列名,Integer[]
*/
@SuppressWarnings({ "rawtypes" })
public static ByteArrayInputStream exportExcel2007(String title, String[] headers, Collection> dataset,
String pattern, boolean isMerg, List mergParm, List