package com.lxyer.excel; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.BiFunction; /** * Created by liangxianyou at 2018/6/27 16:15. */ public class ExcelExportKit { public static final ThreadLocal SDF_THREADLOCAL = new ThreadLocal<>(); //-------------非poi导出--------------- public static StringBuilder exportExcel(Map head, List rows, BiFunction fun) { long start = System.currentTimeMillis(); StringBuilder buf = new StringBuilder(); buf.append(EXCEL_HEAD); buf.append(createBody(head, rows, fun));//body buf.append(EXCEL_END); System.out.println(String.format("数据:%s条,耗时:%s ms", rows.size(), System.currentTimeMillis() - start)); return buf; } private static StringBuilder createBody(Map head, List rows, BiFunction fun) { StringBuilder buf = new StringBuilder(); //table-head buf.append(""); head.forEach((k,v)->{ buf.append(""+k+" "); }); buf.append(""); //table-body rows.forEach(x->{ buf.append(""); head.forEach((k,v)->{ Object value = fun.apply(x, (U)v); if (value == null) value = ""; if (value instanceof Number){ buf.append(""+value+" "); }else if (value instanceof Date){ SimpleDateFormat dateFormat = SDF_THREADLOCAL.get(); if (dateFormat == null) {//ThreadLocal 存贮 simpleDateFormat 对象 SDF_THREADLOCAL.set(dateFormat = new SimpleDateFormat()); } buf.append( ""+ dateFormat.format(value) +" " ); }else { buf.append(""+value+" "); } }); buf.append(""); }); return buf; } public static void exportExceltoFile(Map head, List rows, File file, BiFunction fun) throws IOException { StringBuilder buf = exportExcel(head, rows, fun); strToFile(buf.toString(), file); } public static void strToFile(String entityBody, File file) throws IOException { if (file.exists()) file.delete(); //throw new RuntimeException(file.getPath() + "已经存在"); if (!file.getParentFile().exists()) file.getParentFile().mkdirs(); FileOutputStream out = new FileOutputStream(file); out.write(entityBody.getBytes("UTF-8")); out.close(); } public static class TC { public static final BiFunction BEAN = (t,u)->{ Field field = null; try { field = t.getClass().getDeclaredField((String) u); field.setAccessible(true);//暴力反射 Object o = field.get(t);//得到字段数据的值 return o; } catch (Exception e) { e.printStackTrace(); } return ""; }; public static final BiFunction MAP = (t,u)->{ return ((Map)t).get(u); }; } private static String EXCEL_HEAD = "lxy-kitlxy2082052-10.1.0.72452239512045FalseFalse"; private static String EXCEL_END = "