Java导出excel(完美封装,简单易用)
来源:互联网 发布:肇庆市网络问政 编辑:程序博客网 时间:2024/06/14 04:17
下载地址:http://download.csdn.net/download/jiwengjian123/10151425
package com.md.omp.business.util;import java.io.IOException;import java.io.OutputStreamWriter;import java.lang.reflect.Field;import java.math.BigDecimal;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse; /** * 导出excel工具类 * Project Name:md_omp_business * File Name:ExportTools.java * Package Name:com.md.omp.business.util * Date:2017年10月25日上午10:12:33 * @author 吉文剑 * @param <T> */public class ExportTools{ private StringBuffer content = new StringBuffer(); /** * 导出excel(利用反射机制) * <br> * String[] title = {"订单号","商品名称","商品价格","创建时间"};<br> * String[] field = {"orderNum","productName","productPrice","createTime"};<br> * ExportTools.export("sellJoin", title, field, list, respone);<br> * <br> * 支持字段规则转换 * <br> * 后追加 buyNum[&个] * <br> * 除法 investMoney[/100] * <br> * 乘法 investMoney[*100] * <br> * 类型转换 capitalType[1_金豆,2_钱包,3_其他] * <br> * @param filename 导出文件名称 * @param title 列标题 * @param field 要导出的对象属性字段,(与列标题要 一一对应) * @param results 导出数据list集合 * @param pesponse * Date:2017年10月25日上午11:46:47 * @author 吉文剑 */public static void export(String filename, String[] title,String[] field,List<? extends Object> list, HttpServletResponse pesponse){ new ExportTools().exportExcel(filename, title, field, list, pesponse);}/** * 导出excel(利用反射机制)例: * <br> * String[] title = {"订单号","商品名称","商品价格","创建时间"};<br> * String[] field = {"orderNum","productName","productPrice","createTime"};<br> * ExportTools.export("sellJoin", title, field, list, respone);<br> * <br> * 支持字段规则转换 * <br> * 后追加 buyNum[&个] * <br> * 除法 investMoney[/100] * <br> * 乘法 investMoney[*100] * <br> * 类型转换 capitalType[1_金豆,2_钱包,3_其他] * <br> * @param filename 导出文件名称 * @param title 列标题 * @param field 要导出的对象属性字段,(与列标题要 一一对应) * @param results 导出数据list集合 * @param pesponse * Date:2017年10月25日上午11:46:47 * @author 吉文剑 */public void exportExcel(String filename, String[] title,String[] field,List<? extends Object> list, HttpServletResponse pesponse){setTitle(title);try{ for (int i = 0; i < list.size(); i++) { for (int j = 0; j < field.length; j++) { Object t = list.get(i); Field[] fields = t.getClass().getDeclaredFields(); for ( Field fd : fields ){ fd.setAccessible( true ); String fieldStr = field[j]; String fieldName = ""; //转换规则 Integer typeCode = 0; Map<Integer, String> ruleMap = new HashMap<Integer, String>();//类型转换规则 if(fieldStr.indexOf("[") > 1){ fieldName = fieldStr.substring(0, fieldStr.indexOf("[")); String splits = fieldStr.substring(fieldStr.indexOf("[")+1,fieldStr.indexOf("]")); if(splits.indexOf(",") > -1){//替换 typeCode = 1; String[] split = splits.split(","); for(String s : split){ String[] types = s.split("_"); ruleMap.put(Integer.parseInt(types[0]), types[1]); } }else if(splits.indexOf("&") > -1){//连接 typeCode = 2; ruleMap.put(1, splits.substring(splits.indexOf("&")+1,splits.length())); }else if(splits.indexOf("/") > -1){//除法 typeCode = 3; ruleMap.put(1, splits.substring(splits.indexOf("/")+1,splits.length())); }else if(splits.indexOf("*") > -1){//乘法 typeCode = 4; ruleMap.put(1, splits.substring(splits.indexOf("*")+1,splits.length())); } }else{ fieldName = fieldStr; }; //取值 if(fieldName.equals(fd.getName())){ Object value = new Object(); if("java.util.Date".equals(fd.getType().getName())){ value = formatDate(fd.get(t)); }else if("java.math.BigDecimal".equals(fd.getType().getName())){ value = fd.get(t); }else{ value = fd.get(t); } //需要做转换 if(typeCode != 0){ switch (typeCode) { case 1: value = ruleMap.get(value); break; case 2: value = value + ruleMap.get(1); break; case 3: if(null == value || "".equals(value.toString())) value = 0; value = new BigDecimal(value.toString()).divide(new BigDecimal(ruleMap.get(1)),2,BigDecimal.ROUND_HALF_UP); break; case 4: if(null == value || "".equals(value.toString())) value = 0; value = new BigDecimal(value.toString()).multiply(new BigDecimal(ruleMap.get(1))); break; default: break; } } setField(value); break; } } } content.append("\n");} downloadFileCsv(getFileName(filename), content.toString(), pesponse);}catch ( Exception e ){System.err.println("导出文件:"+filename+" 出错"); e.printStackTrace(); } }/** * 生成excel * @param filename * @param content * @param response * @param contentType * @throws IOException * Date:2017年10月26日下午1:36:43 * @author 吉文剑 */public void downloadFileCsv(String filename, String content, HttpServletResponse response) throws IOException { response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(filename.getBytes(), "UTF-8") + "\""); OutputStreamWriter ow = new OutputStreamWriter(response.getOutputStream(), "UTF-16LE"); ow.write(0xFEFF); ow.write(content); if (null != ow) { ow.flush(); ow.close(); } }/** * 设置标题 * @param title * Date:2017年10月25日上午11:38:54 * @author 吉文剑 */private void setTitle(String[] title){for (int i = 0; i < title.length; i++) {content.append((title[i] == null || "null".equals(title[i].toString()) ? "" : title[i].toString()) + "\t");}content.append("\n");}/** * 设置列表数据 * @param value * Date:2017年10月25日上午11:46:30 * @author 吉文剑 */private void setField(Object value){content.append((value == null || "null".equals(value.toString()) ? "" : value.toString()) + "\t");}/** * 生成当前时间的后缀文件名 * @param fileName * @return * Date:2017年10月25日上午11:54:05 * @author 吉文剑 */private String getFileName(String fileName){ SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmm"); return fileName + dateFormat.format(new Date()) +".csv"; }/** * 时间类型转化 * @param date * @return * Date:2017年10月25日上午11:53:10 * @author 吉文剑 */private String formatDate(Object obj){ if(obj == null){ return ""; } DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format.format((Date)obj); }}
阅读全文
0 0
- Java导出excel(完美封装,简单易用)
- java 导出excel封装了一个简单的导出方法。
- java封装导出Excel
- 简单封装POI导出excel
- poi封装导出Excel【java】
- java简易excel导入导出工具(封装POI)
- java简易excel导入导出工具(封装POI)
- java导出excel封装成工具类
- java导出excel简单实例
- 简单、完美的导出excel/word报表解决方案
- (整理) 简单、完美的导出excel/word报表解决方案
- [JAVA]Java导出Excel数据的一种方法(完美实现,包含表格线)
- java导出excel,简单的excel样式编写,poi导出
- 导出数据到Excel表中--用Apache的POI实现简单封装
- 导出Excel封装
- 封装excel的导出
- 导出excel封装
- 封装poi导出EXCEL
- 关于mybatis中对mysql和Oracle数据库分页插件的使用
- 【Mysql】Linux环境安装Mysql
- linux0.11内核完全剖析
- JavaScript易错知识点整理
- Leetcode 算法设计 第十四周
- Java导出excel(完美封装,简单易用)
- cookie小实例第二弹------浏览记录
- spring cloud开发实战讲解
- ethtool 命令详解
- 学习日记12-08
- Python checkio Monkey Typing解决方案
- 使用决策树进行分类
- 第一章
- 弱口令字典