java使用ExportUtils工具类实现按模板导出表格数据

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格式的,记得把程序中的模版文件路径改下

java使用ExportUtils工具类实现按模板导出表格数据_第1张图片




你可能感兴趣的:(java使用ExportUtils工具类实现按模板导出表格数据)