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;        }    }}
相關文章
相關標籤/搜索