java反射构建excel导出工具类

1、定义注解,用于vo类中标记使用到的属性java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author fc
* @date 2018-09-18
*/
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Allow {
String title() default "undefined";
}
2、反射工具类
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.List;/** * @author fc * @date 2018-09-18 * @msg 反射工具类 * @tips 字段必须使用@Allow注解 title属性定义标题 */public class ExcelCreateUtil {    /**     *     * @param o object是vo类     * @param suf 返回的excel文件后缀     * @return     * @throws Exception     */    public static Workbook createWorkBook(List<Object> o,ReturnSuf suf) throws Exception {        //定义一个新的工做簿        Workbook wb = suf.getValue().equals(ReturnSuf.XLSX.getValue())?new XSSFWorkbook():new HSSFWorkbook();        //建立sheet        Sheet sheet = wb.createSheet(String.valueOf(System.currentTimeMillis()));        //建立行        Row row = sheet.createRow(0);        //第一行以注解@Allow title属性命名        Class<?> aClass = o.get(0).getClass();        Field[] fields1 = aClass.getDeclaredFields();        int bj2 = 0;        for (int j = 0; j < fields1.length; j++) {            Allow annotation = fields1[j].getAnnotation(Allow.class);            if (annotation != null) {                fields1[j].setAccessible(true);                row.createCell(bj2).setCellValue(annotation.title());                bj2++;            }        }        int bj1 = 1;        for (int i = 0; i < o.size(); i++) {            //获取当前对象            Object o1 = o.get(i);            //获取当前类类型            Class<?> c = o.get(i).getClass();            //获取当前类类型的全部属性            Field[] fields = c.getDeclaredFields();            //建立行-从第二行起            Row row1 = sheet.createRow(bj1);            bj1++;            int bj = 0;            for (int j = 0; j < fields.length; j++) {                Allow annotation = fields1[j].getAnnotation(Allow.class);                if (annotation != null) {                    fields[j].setAccessible(true);                    //获得属性名                    String name = fields[j].getName();                    //获取属性对应的get方法                    Method method = c.getDeclaredMethod(toGet(name));                    Object invoke = method.invoke(o1);                    String value = invoke == null ? "" : invoke.toString();                    //赋值                    row1.createCell(bj).setCellValue(value);                    bj++;                }            }        }        return wb;    }    //获取属性的set方法    public static String toSet(String s) {        final String SET = "set";        if (Character.isUpperCase(s.charAt(0))) {            return SET + s;        } else {            return SET + (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();        }    }    //获取属性的get方法    public static String toGet(String s) {        final String GET = "get";        if (Character.isUpperCase(s.charAt(0))) {            return GET + s;        } else {            return GET + (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();        }    }    public enum ReturnSuf {        XLS(".xls后缀", ".xls"),        /**         *大数据量建议使用.xlsx         */        XLSX(".xlsx后缀", ".xlsx"),;        private String key;        private String value;        ReturnSuf(String key, String value) {            this.key = key;            this.value = value;        }        public String getKey() {            return key;        }        public void setKey(String key) {            this.key = key;        }        public String getValue() {            return value;        }        public void setValue(String value) {            this.value = value;        }    }}
相关文章
相关标签/搜索