1.该工具用HSSFWorkbook实现,只能导出.xls格式的模板(若模板为xlsx,可用另存为,选择文件格式xls保存生成一遍即可)。
2.该工具可以实现一个模板有多个sheet的导出,只需把数据放入,在表格用字段映射放入的对象即可(字段必须同放入该数据的变量名相同)
3.若导出的表格很复杂,可以把表格的一列,规划为新的对象,在后台数据处理为这个新建对象的list,表格再同理foreach即可
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.regex.Pattern;
import javax.persistence.Temporal;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.excelutils.ExcelUtils;
import com.brucelee.po.ExcelFile;
/**
* @ClassName: WebServiceUtils
* @Description: WebService帮助类
*/
public class ExportExcelUtils {
private static final String DATE_FORMAT = "yyMMddHHmmss";
public static StringBuffer filePackage;
public static StringBuffer filename;
public static String config;
private static ExportExcelUtils instance = null; // 单例对象
private static File file; // 操作文件
/**
* 私有化构造方法
*
* @param file
* 文件对象
*/
private ExportExcelUtils(File file) {
super();
this.file = file;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
/**
* 获取单例对象并进行初始化
*
* @param file
* 文件对象
* @return 返回初始化后的单例对象
*/
public static ExportExcelUtils getInstance(File file) {
if (instance == null) {
// 当单例对象为null时进入同步代码块
synchronized (ExportExcelUtils.class) {
// 再次判断单例对象是否为null,防止多线程访问时多次生成对象
if (instance == null) {
instance = new ExportExcelUtils(file);
}
}
} else {
// 如果操作的文件对象不同,则重置文件对象
if (!file.equals(instance.getFile())) {
instance.setFile(file);
}
}
return instance;
}
/**
* 获取单例对象并进行初始化
*
* @param filePath
* 文件路径
* @return 返回初始化后的单例对象
*/
public static ExportExcelUtils getInstance(String filePath) {
return getInstance(new File(filePath));
}
/**
*
* @Title: isObj
* @Description: 根据请求值执行相应操作
* @param is
* @param objects void 返回类型
*/
@SuppressWarnings("all")
public static void isObj(Integer is, Object[] objects) {
switch (is) {
case 1:
ExcelUtils.addValue("list", objects[0]);
break;
case 2:
ExcelUtils.addValue("bean", objects[0]);
break;
case 3://多集合
for (int i = 0; i < objects.length; i++) {
ExcelUtils.addValue("list" + (i+1), objects[i]);
}
break;
case 4://集合与对象,参数位置顺序要对
ExcelUtils.addValue("bean", objects[0]);
ExcelUtils.addValue("list", objects[1]);
break;
case 5://多集合与对象,参数位置顺序要对
ExcelUtils.addValue("bean", objects[0]);
for (int i = 1; i < objects.length; i++) {
ExcelUtils.addValue("list" + (i+1), objects[i]);
}
break;
default:
ExcelUtils.addValue("list", objects[0]);
break;
}
}
//放入数据
@SuppressWarnings("all")
public static void putInExcelData(Map dataMap) {
for (Map.Entry map : dataMap.entrySet()) {
ExcelUtils.addValue(map.getKey(), dataMap.get(map.getKey()));
}
}
/**
* 通用-通过模板导出方法
* @param
* @param
*
* @return
*/
public static void export(ExcelFile excelFile
, HttpServletRequest request
, HttpServletResponse response) {
try {
ExportExcelUtils.config = request.getSession().getServletContext().getRealPath("/WEB-INF/xls/" + excelFile.getFile());
// 为每个用户创建一个导出文件夹
excelFile.setFileName(excelFile.getFileName()+ DateUtil.DateToString(new Date(), DATE_FORMAT) + ".xls");
excelFile.setFileName(new String(excelFile.getFileName().getBytes("gb2312"), "iso8859-1"));
ExportExcelUtils.filePackage = new StringBuffer(excelFile.getFilePackage());
ExportExcelUtils.filename = new StringBuffer(excelFile.getFileName());
File filex = new File(String.valueOf(filePackage));
if(!filex.exists()) {
filex.mkdirs();
}
System.out.println("----------------------------");
System.out.println("Start export excel.....");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(excelFile.getFile().getBytes(), "iso8859-1"));
FileOutputStream out = new FileOutputStream(filePackage + "/" + filename);
//执行导出模板数据
ExcelUtils.export(config, out);
//是否需要输出(下载)
if(excelFile.isWriteOut()) {
InputStream inputStream = new FileInputStream(filePackage + "/" + filename);
OutputStream ouputStream = response.getOutputStream();
byte[] b = new byte[1024];
int length;
while((length = inputStream.read(b)) > 0){
ouputStream.write(b, 0, length);
}
inputStream.close();
ouputStream.flush();
ouputStream.close();
}
System.out.println("End export excel!");
System.out.println("----------------------------");
} catch (Exception ex) {
System.out.println("Excel error");
System.out.println("----------------------------");
}
}
/**
* 是否为空
*
* @param str
* @return
*/
public static boolean isEmpty(Object obj) {
if (obj == null || "".equals(obj)) {
return true;
}
if (obj instanceof Collection) {
@SuppressWarnings("rawtypes")
Collection coll = (Collection) obj;
if (coll.size() <= 0) {
return true;
}
}
if (obj instanceof Map) {
@SuppressWarnings("rawtypes")
Map map = (Map) obj;
return map.isEmpty();
}
if(obj instanceof Object []) {
Object[] objs = (Object [])obj;
boolean flag = false;
if(objs.length <= 0)
flag = true;
for (Object objl : objs) {
if(objl instanceof String) {
String str = (String)objl;
if (str == null || str == "null" || "".equals(str) || str.length() <= 0) {
flag = true;
break;
}
}
}
return flag;
}
return false;
}
/**
* 是否是整数
*
* @param str
* @return
*/
public static boolean isNumber(String... strs) {
if (isEmpty(strs))
return false;
Pattern pattern = Pattern.compile("\\d*");
boolean isNumber = true;
for (String str : strs) {
isNumber = pattern.matcher(str).matches();
}
return isNumber;
}
/**
*
* @Title: replaceSymbol
* @Description: 替换符号
* @param str
* @param oldSymbol
* @param newSymbol
* @return String 返回类型
*/
public static String replaceSymbol(String str,String oldSymbol,String newSymbol) {
if(!ExportExcelUtils.isEmpty(str)) {
str = str.replace(oldSymbol, newSymbol);
}
return str;
}
/**
*
* @Title: splitString
* @Description: 分割字符串
* @param str 字符串
* @param splitStr 分割符号
* @return
* @return String[] 返回类型
*/
public static String[] splitString(String str, String splitStr) {
String[] strs = null;
if(!ExportExcelUtils.isEmpty(str) && !ExportExcelUtils.isEmpty(splitStr)) {
strs = str.split(splitStr);
}
return strs;
}
/**
*
* @Title: isExcel2003
* @Description: 是否是2003的excel,返回true是2003
* @param fileName 文件的名称
* @return
* @return boolean 返回类型
*/
public static boolean isExcel2003(String fileName) {
return fileName.matches("^.+\\.(?i)(xls)$");
}
/**
*
* @Title: isExcel2007
* @Description: 是否是2007的excel,返回true是2007
* @param fileName 文件的名称
* @return
* @return boolean 返回类型
*/
public static boolean isExcel2007(String fileName) {
return fileName.matches("^.+\\.(?i)(xlsx)$");
}
}
下面是引用的工具类,和po
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.brucelee.po.DateStyle;
import com.brucelee.po.Week;
public class DateUtil {
/**
* 获取SimpleDateFormat
* @param parttern 日期格式
* @return SimpleDateFormat对象
* @throws RuntimeException 异常:非法日期格式
*/
private static SimpleDateFormat getDateFormat(String parttern) throws RuntimeException {
return new SimpleDateFormat(parttern);
}
/**
* 获取日期中的某数值。如获取月份
* @param date 日期
* @param dateType 日期格式
* @return 数值
*/
private static int getInteger(Date date, int dateType) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(dateType);
}
/**
* 增加日期中某类型的某数值。如增加日期
* @param date 日期字符串
* @param dateType 类型
* @param amount 数值
* @return 计算后日期字符串
*/
private static String addInteger(String date, int dateType, int amount) {
String dateString = null;
DateStyle dateStyle = getDateStyle(date);
if (dateStyle != null) {
Date myDate = StringToDate(date, dateStyle);
myDate = addInteger(myDate, dateType, amount);
dateString = DateToString(myDate, dateStyle);
}
return dateString;
}
/**
* 增加日期中某类型的某数值。如增加日期
* @param date 日期
* @param dateType 类型
* @param amount 数值
* @return 计算后日期
*/
private static Date addInteger(Date date, int dateType, int amount) {
Date myDate = null;
if (date != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateType, amount);
myDate = calendar.getTime();
}
return myDate;
}
/**
* 获取精确的日期
* @param timestamps 时间long集合
* @return 日期
*/
private static Date getAccurateDate(List timestamps) {
Date date = null;
long timestamp = 0;
Map map = new HashMap();
List absoluteValues = new ArrayList();
if (timestamps != null && timestamps.size() > 0) {
if (timestamps.size() > 1) {
for (int i = 0; i < timestamps.size(); i++) {
for (int j = i + 1; j < timestamps.size(); j++) {
long absoluteValue = Math.abs(timestamps.get(i) - timestamps.get(j));
absoluteValues.add(absoluteValue);
long[] timestampTmp = { timestamps.get(i), timestamps.get(j) };
map.put(absoluteValue, timestampTmp);
}
}
// 有可能有相等的情况。如2012-11和2012-11-01。时间戳是相等的
long minAbsoluteValue = -1;
if (!absoluteValues.isEmpty()) {
// 如果timestamps的size为2,这是差值只有一个,因此要给默认值
minAbsoluteValue = absoluteValues.get(0);
}
for (int i = 0; i < absoluteValues.size(); i++) {
for (int j = i + 1; j < absoluteValues.size(); j++) {
if (absoluteValues.get(i) > absoluteValues.get(j)) {
minAbsoluteValue = absoluteValues.get(j);
} else {
minAbsoluteValue = absoluteValues.get(i);
}
}
}
if (minAbsoluteValue != -1) {
long[] timestampsLastTmp = map.get(minAbsoluteValue);
if (absoluteValues.size() > 1) {
timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]);
} else if (absoluteValues.size() == 1) {
// 当timestamps的size为2,需要与当前时间作为参照
long dateOne = timestampsLastTmp[0];
long dateTwo = timestampsLastTmp[1];
if ((Math.abs(dateOne - dateTwo)) < 100000000000L) {
timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]);
} else {
long now = new Date().getTime();
if (Math.abs(dateOne - now) <= Math.abs(dateTwo - now)) {
timestamp = dateOne;
} else {
timestamp = dateTwo;
}
}
}
}
} else {
timestamp = timestamps.get(0);
}
}
if (timestamp != 0) {
date = new Date(timestamp);
}
return date;
}
/**
* 判断字符串是否为日期字符串
* @param date 日期字符串
* @return true or false
*/
public static boolean isDate(String date) {
boolean isDate = false;
if (date != null) {
if (StringToDate(date) != null) {
isDate = true;
}
}
return isDate;
}
/**
* 获取日期字符串的日期风格。失敗返回null。
* @param date 日期字符串
* @return 日期风格
*/
public static DateStyle getDateStyle(String date) {
DateStyle dateStyle = null;
Map map = new HashMap();
List timestamps = new ArrayList();
for (DateStyle style : DateStyle.values()) {
Date dateTmp = StringToDate(date, style.getValue());
if (dateTmp != null) {
timestamps.add(dateTmp.getTime());
map.put(dateTmp.getTime(), style);
}
}
dateStyle = map.get(getAccurateDate(timestamps).getTime());
return dateStyle;
}
/**
* 将日期字符串转化为日期。失败返回null。
* @param date 日期字符串
* @return 日期
*/
public static Date StringToDate(String date) {
DateStyle dateStyle = null;
return StringToDate(date, dateStyle);
}
/**
* 将日期字符串转化为日期。失败返回null。
* @param date 日期字符串
* @param parttern 日期格式
* @return 日期
*/
public static Date StringToDate(String date, String parttern) {
Date myDate = null;
if (date != null) {
try {
myDate = getDateFormat(parttern).parse(date);
} catch (Exception e) {
}
}
return myDate;
}
/**
* 将日期字符串转化为日期。失败返回null。
* @param date 日期字符串
* @param dateStyle 日期风格
* @return 日期
*/
public static Date StringToDate(String date, DateStyle dateStyle) {
Date myDate = null;
if (dateStyle == null) {
List timestamps = new ArrayList();
for (DateStyle style : DateStyle.values()) {
Date dateTmp = StringToDate(date, style.getValue());
if (dateTmp != null) {
timestamps.add(dateTmp.getTime());
}
}
myDate = getAccurateDate(timestamps);
} else {
myDate = StringToDate(date, dateStyle.getValue());
}
return myDate;
}
/**
* 将日期转化为日期字符串。失败返回null。
* @param date 日期
* @param parttern 日期格式
* @return 日期字符串
*/
public static String DateToString(Date date, String parttern) {
String dateString = null;
if (date != null) {
try {
dateString = getDateFormat(parttern).format(date);
} catch (Exception e) {
}
}
return dateString;
}
/**
* 将日期转化为日期字符串。失败返回null。
* @param date 日期
* @param dateStyle 日期风格
* @return 日期字符串
*/
public static String DateToString(Date date, DateStyle dateStyle) {
String dateString = null;
if (dateStyle != null) {
dateString = DateToString(date, dateStyle.getValue());
}
return dateString;
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
* @param date 旧日期字符串
* @param parttern 新日期格式
* @return 新日期字符串
*/
public static String StringToString(String date, String parttern) {
return StringToString(date, null, parttern);
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
* @param date 旧日期字符串
* @param dateStyle 新日期风格
* @return 新日期字符串
*/
public static String StringToString(String date, DateStyle dateStyle) {
return StringToString(date, null, dateStyle);
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
* @param date 旧日期字符串
* @param olddParttern 旧日期格式
* @param newParttern 新日期格式
* @return 新日期字符串
*/
public static String StringToString(String date, String olddParttern, String newParttern) {
String dateString = null;
if (olddParttern == null) {
DateStyle style = getDateStyle(date);
if (style != null) {
Date myDate = StringToDate(date, style.getValue());
dateString = DateToString(myDate, newParttern);
}
} else {
Date myDate = StringToDate(date, olddParttern);
dateString = DateToString(myDate, newParttern);
}
return dateString;
}
/**
* 将日期字符串转化为另一日期字符串。失败返回null。
* @param date 旧日期字符串
* @param olddDteStyle 旧日期风格
* @param newDateStyle 新日期风格
* @return 新日期字符串
*/
public static String StringToString(String date, DateStyle olddDteStyle, DateStyle newDateStyle) {
String dateString = null;
if (olddDteStyle == null) {
DateStyle style = getDateStyle(date);
dateString = StringToString(date, style.getValue(), newDateStyle.getValue());
} else {
dateString = StringToString(date, olddDteStyle.getValue(), newDateStyle.getValue());
}
return dateString;
}
/**
* 增加日期的年份。失败返回null。
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加年份后的日期字符串
*/
public static String addYear(String date, int yearAmount) {
return addInteger(date, Calendar.YEAR, yearAmount);
}
/**
* 增加日期的年份。失败返回null。
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加年份后的日期
*/
public static Date addYear(Date date, int yearAmount) {
return addInteger(date, Calendar.YEAR, yearAmount);
}
/**
* 增加日期的月份。失败返回null。
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加月份后的日期字符串
*/
public static String addMonth(String date, int yearAmount) {
return addInteger(date, Calendar.MONTH, yearAmount);
}
/**
* 增加日期的月份。失败返回null。
* @param date 日期
* @param yearAmount 增加数量。可为负数
* @return 增加月份后的日期
*/
public static Date addMonth(Date date, int yearAmount) {
return addInteger(date, Calendar.MONTH, yearAmount);
}
/**
* 增加日期的天数。失败返回null。
* @param date 日期字符串
* @param dayAmount 增加数量。可为负数
* @return 增加天数后的日期字符串
*/
public static String addDay(String date, int dayAmount) {
return addInteger(date, Calendar.DATE, dayAmount);
}
/**
* 增加日期的天数。失败返回null。
* @param date 日期
* @param dayAmount 增加数量。可为负数
* @return 增加天数后的日期
*/
public static Date addDay(Date date, int dayAmount) {
return addInteger(date, Calendar.DATE, dayAmount);
}
/**
* 增加日期的小时。失败返回null。
* @param date 日期字符串
* @param dayAmount 增加数量。可为负数
* @return 增加小时后的日期字符串
*/
public static String addHour(String date, int hourAmount) {
return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);
}
/**
* 增加日期的小时。失败返回null。
* @param date 日期
* @param dayAmount 增加数量。可为负数
* @return 增加小时后的日期
*/
public static Date addHour(Date date, int hourAmount) {
return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);
}
/**
* 增加日期的分钟。失败返回null。
* @param date 日期字符串
* @param dayAmount 增加数量。可为负数
* @return 增加分钟后的日期字符串
*/
public static String addMinute(String date, int hourAmount) {
return addInteger(date, Calendar.MINUTE, hourAmount);
}
/**
* 增加日期的分钟。失败返回null。
* @param date 日期
* @param dayAmount 增加数量。可为负数
* @return 增加分钟后的日期
*/
public static Date addMinute(Date date, int hourAmount) {
return addInteger(date, Calendar.MINUTE, hourAmount);
}
/**
* 增加日期的秒钟。失败返回null。
* @param date 日期字符串
* @param dayAmount 增加数量。可为负数
* @return 增加秒钟后的日期字符串
*/
public static String addSecond(String date, int hourAmount) {
return addInteger(date, Calendar.SECOND, hourAmount);
}
/**
* 增加日期的秒钟。失败返回null。
* @param date 日期
* @param dayAmount 增加数量。可为负数
* @return 增加秒钟后的日期
*/
public static Date addSecond(Date date, int hourAmount) {
return addInteger(date, Calendar.SECOND, hourAmount);
}
/**
* 获取日期的年份。失败返回0。
* @param date 日期字符串
* @return 年份
*/
public static int getYear(String date) {
return getYear(StringToDate(date));
}
/**
* 获取日期的年份。失败返回0。
* @param date 日期
* @return 年份
*/
public static int getYear(Date date) {
return getInteger(date, Calendar.YEAR);
}
/**
* 获取日期的月份。失败返回0。
* @param date 日期字符串
* @return 月份
*/
public static int getMonth(String date) {
return getMonth(StringToDate(date));
}
/**
* 获取日期的月份。失败返回0。
* @param date 日期
* @return 月份
*/
public static int getMonth(Date date) {
return getInteger(date, Calendar.MONTH);
}
/**
* 获取日期的天数。失败返回0。
* @param date 日期字符串
* @return 天
*/
public static int getDay(String date) {
return getDay(StringToDate(date));
}
/**
* 获取日期的天数。失败返回0。
* @param date 日期
* @return 天
*/
public static int getDay(Date date) {
return getInteger(date, Calendar.DATE);
}
/**
* 获取日期的小时。失败返回0。
* @param date 日期字符串
* @return 小时
*/
public static int getHour(String date) {
return getHour(StringToDate(date));
}
/**
* 获取日期的小时。失败返回0。
* @param date 日期
* @return 小时
*/
public static int getHour(Date date) {
return getInteger(date, Calendar.HOUR_OF_DAY);
}
/**
* 获取日期的分钟。失败返回0。
* @param date 日期字符串
* @return 分钟
*/
public static int getMinute(String date) {
return getMinute(StringToDate(date));
}
/**
* 获取日期的分钟。失败返回0。
* @param date 日期
* @return 分钟
*/
public static int getMinute(Date date) {
return getInteger(date, Calendar.MINUTE);
}
/**
* 获取日期的秒钟。失败返回0。
* @param date 日期字符串
* @return 秒钟
*/
public static int getSecond(String date) {
return getSecond(StringToDate(date));
}
/**
* 获取日期的秒钟。失败返回0。
* @param date 日期
* @return 秒钟
*/
public static int getSecond(Date date) {
return getInteger(date, Calendar.SECOND);
}
/**
* 获取日期 。默认yyyy-MM-dd格式。失败返回null。
* @param date 日期字符串
* @return 日期
*/
public static String getDate(String date) {
return StringToString(date, DateStyle.YYYY_MM_DD);
}
/**
* 获取日期。默认yyyy-MM-dd格式。失败返回null。
* @param date 日期
* @return 日期
*/
public static String getDate(Date date) {
return DateToString(date, DateStyle.YYYY_MM_DD);
}
/**
* 获取日期的时间。默认HH:mm:ss格式。失败返回null。
* @param date 日期字符串
* @return 时间
*/
public static String getTime(String date) {
return StringToString(date, DateStyle.HH_MM_SS);
}
/**
* 获取日期的时间。默认HH:mm:ss格式。失败返回null。
* @param date 日期
* @return 时间
*/
public static String getTime(Date date) {
return DateToString(date, DateStyle.HH_MM_SS);
}
/**
* 获取日期的星期。失败返回null。
* @param date 日期字符串
* @return 星期
*/
public static Week getWeek(String date) {
Week week = null;
DateStyle dateStyle = getDateStyle(date);
if (dateStyle != null) {
Date myDate = StringToDate(date, dateStyle);
week = getWeek(myDate);
}
return week;
}
/**
* 获取日期的星期。失败返回null。
* @param date 日期
* @return 星期
*/
public static Week getWeek(Date date) {
Week week = null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int weekNumber = calendar.get(Calendar.DAY_OF_WEEK) - 1;
switch (weekNumber) {
case 0:
week = Week.SUNDAY;
break;
case 1:
week = Week.MONDAY;
break;
case 2:
week = Week.TUESDAY;
break;
case 3:
week = Week.WEDNESDAY;
break;
case 4:
week = Week.THURSDAY;
break;
case 5:
week = Week.FRIDAY;
break;
case 6:
week = Week.SATURDAY;
break;
}
return week;
}
/**
* 获取两个日期相差的天数
* @param date 日期字符串
* @param otherDate 另一个日期字符串
* @return 相差天数
*/
public static int getIntervalDays(String date, String otherDate) {
return getIntervalDays(StringToDate(date), StringToDate(otherDate));
}
/**
* @param date 日期
* @param otherDate 另一个日期
* @return 相差天数
*/
public static int getIntervalDays(Date date, Date otherDate) {
date = DateUtil.StringToDate(DateUtil.getDate(date));
long time = Math.abs(date.getTime() - otherDate.getTime());
return (int)time/(24 * 60 * 60 * 1000);
}
}
public enum Week {
MONDAY("星期一", "Monday", "Mon.", 1),
TUESDAY("星期二", "Tuesday", "Tues.", 2),
WEDNESDAY("星期三", "Wednesday", "Wed.", 3),
THURSDAY("星期四", "Thursday", "Thur.", 4),
FRIDAY("星期五", "Friday", "Fri.", 5),
SATURDAY("星期六", "Saturday", "Sat.", 6),
SUNDAY("星期日", "Sunday", "Sun.", 7);
String name_cn;
String name_en;
String name_enShort;
int number;
Week(String name_cn, String name_en, String name_enShort, int number) {
this.name_cn = name_cn;
this.name_en = name_en;
this.name_enShort = name_enShort;
this.number = number;
}
public String getChineseName() {
return name_cn;
}
public String getName() {
return name_en;
}
public String getShortName() {
return name_enShort;
}
public int getNumber() {
return number;
}
}
public class ExcelFile {
private String filePackage;//文件包
private String fileName;//文件名称
private String file;//文件
private String title;//title
private boolean isWriteOut = true;//默认为true,是否输出文件
public ExcelFile(Builder builder){
this.filePackage = builder.filePackage;
this.fileName = builder.fileName;
this.file = builder.file;
this.title = builder.title;
this.isWriteOut = builder.isWriteOut;
}
//动态初始化值。fileName,file默认必填
public static class Builder{
private final String fileName;
private final String file;
private String filePackage;
private String title;
private boolean isWriteOut = true;
public Builder(String fileName,String file){
this.fileName = fileName;
this.file = file;
}
public Builder setFilePackage(String filePackage)
{this.filePackage = filePackage;return this;}
public Builder setTitle(String title)
{this.title=title;return this;}
public Builder setIsWriteOut(Boolean isWriteOut)
{this.isWriteOut = isWriteOut;return this;}
public ExcelFile build(){
return new ExcelFile(this);
}
}
public String getFilePackage() {
return filePackage;
}
public void setFilePackage(String filePackage) {
this.filePackage = filePackage;
}
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isWriteOut() {
return isWriteOut;
}
public void setWriteOut(boolean isWriteOut) {
this.isWriteOut = isWriteOut;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
package com.brucelee.po;
public class Brucelee {
private String valueA;
private String valueB;
private String valueC;
private String valueD;
public Brucelee(){}
public Brucelee(String valueA,String valueB,String valueC,String valueD){
this.valueA = valueA;
this.valueB = valueB;
this.valueC = valueC;
this.valueD = valueD;
}
public String getValueA() {
return valueA;
}
public void setValueA(String valueA) {
this.valueA = valueA;
}
public String getValueB() {
return valueB;
}
public void setValueB(String valueB) {
this.valueB = valueB;
}
public String getValueC() {
return valueC;
}
public void setValueC(String valueC) {
this.valueC = valueC;
}
public String getValueD() {
return valueD;
}
public void setValueD(String valueD) {
this.valueD = valueD;
}
}
下面的是Servlet
package main;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.Test;
import com.brucelee.po.Brucelee;
import com.brucelee.po.ExcelFile;
import com.brucelee.utils.ExportExcelUtils;
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map dataMap = new HashMap();
List bruceList = new ArrayList();
//造数据
Brucelee bruceA = new Brucelee("1","1","1","1");
Brucelee bruceB = new Brucelee("2","2","2","2");
Brucelee bruceC = new Brucelee("3","3","3","3");
Brucelee bruceD = new Brucelee("4","4","4","4");
bruceList.add(bruceA);
bruceList.add(bruceB);
bruceList.add(bruceC);
bruceList.add(bruceD);
//key,表格使用同样的名称映射
dataMap.put("bruceList", bruceList);
//赋值,excel名称
String fileName = "brucelee";
ExcelFile excelFile = new ExcelFile.Builder(fileName, "brucelee.xls").setFilePackage("D:/exportexcel/").build();
ExportExcelUtils exportUtil = ExportExcelUtils.getInstance(fileName);
//放入数据
exportUtil.putInExcelData(dataMap);
//导出数据
exportUtil.export(excelFile, request, response);
}
}
这个是模版,xls格式的,记得把程序中的模版文件路径改下