此demo 是基於poi封裝對象式註解導入導出,項目框架爲springboot項目!
簡單的說明一下此demo涉及到的知識點,但願能給初學者帶來方便!
- poi-excel 基本操做(工具)
- 自定義註解的使用
- 全局異常捕獲的定義
- jkd1.8新特性:Lambda 表達式 、函數式接口 等等
- 統一出參包裝類
- lombok ...
- 比較適合初學者~
這份excel是沒法定義複雜的excel模版的,只能適用於最簡單的excel導入導出,若不符合需求,請自行更改~ 大體說一下提供的excel工具吧!git
導出:
/** * 導出模版 * * @param excelName excel 名稱 * @param clazz 數據集 * @param response 使用response能夠導出到瀏覽器 * @param <T> * @return */ public static <T> Boolean exportTemplate(String excelName, Class<T> clazz, HttpServletResponse response) /** * 導出模版 * * @param excelName excel 名稱 * @param clazz 數據集 * @param type excel 類型 * @param response 使用response能夠導出到瀏覽器 * @param <T> * @return */ public static <T> Boolean exportTemplate(String excelName, Class<T> clazz, Type type, HttpServletResponse response) /** * excel 導出 (對象) * * @param excelName excel 名稱 * @param list 數據集 * @param clazz 反射clazz * @param response 使用response能夠導出到瀏覽器 * @param <T> * @return */ public static <T> Boolean exportExcel(String excelName, List<T> list, Class<T> clazz, HttpServletResponse response) /** * excel 導出 (對象) * * @param excelName excel 名稱 * @param list 數據集 * @param clazz 反射clazz * @param type excel 類型 * @param response 使用response能夠導出到瀏覽器 * @param <T> * @return */ public static <T> Boolean exportExcel(String excelName, List<T> list, Class<T> clazz, Type type, HttpServletResponse response) /** * excel 導出 (Map) * * @param excelName excel 名稱 * @param clazz 反射clazz * @param list 數據集 * @param response 使用response能夠導出到瀏覽器 * @param <T> * @return */ public static <T> Boolean exportExcel(String excelName, Class<T> clazz, List<Map<String, Object>> list, HttpServletResponse response) /** * excel 導出 (Map) * * @param excelName excel 名稱 * @param clazz * @param list 數據集 * @param type excel 類型 * @param response 使用response能夠導出到瀏覽器 * @param <T> * @return */ public static <T> Boolean exportExcel(String excelName, Class<T> clazz, List<Map<String, Object>> list, Type type, HttpServletResponse response)
導入:
/** * 傳入文本對象輸出list集合(導入) * * @param file 流文件 * @param clazz 要轉義成的類對象 * @return */ public static <T> List<T> importExcel(MultipartFile file, Class<T> clazz)
excel註解類,提供了幾個簡單的判斷處理:
/** * <p> * excel 註解 * </p> * * @author <a href="mailto:yangyanrui@yidianlife.com">xiaoyang</a> * @version V0.0.1 * @date 2019年09月10日 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD}) public @interface Excel { /** * 表頭中文 * * @return */ String titleName(); /** * 列寬 * * @return */ int titleSize() default 30; /** * 字段順序 正序 * * @return */ int orderNum(); /** * 是否容許空值 ,默認不容許 * <p> * false:不容許 true :容許 * * @return */ boolean empty() default false; /** * 內部類 * * @return */ CellType type() default @CellType; /** * 設置格式 * 默認: * 時間:yyyy-MM-dd HH:mm:ss * 小數點:兩位,四捨五入 * * @return */ @interface CellType { TimeType timeType() default TimeType.TIMEF_FORMAT; DecimalType decimalType() default DecimalType.two; } }
TimeType 工具類:
/** * <p> * 日期格式 * </p> * * @author <a href="mailto:yangyanrui@yidianlife.com">xiaoyang</a> * @version V0.0.1 * @date 2019年09月20日 */ public enum TimeType { /** * yyyy-MM-dd */ DATE_FORMAT("yyyy-MM-dd"), /** * yyyy-MM */ YEAR_S_MONTH("yyyy-MM"), /** * yyyyMM */ YEAR_MONTH("yyyyMM"), /** * yyyy-MM-dd HH:mm:ss */ TIMEF_FORMAT("yyyy-MM-dd HH:mm:ss"), /** * yyyy-MM-dd HH:mm:ss.SSS */ MSEL_FORMAT("yyyy-MM-dd HH:mm:ss.SSS"), /** * yyyy年MM月dd日 */ ZHCN_DATE_FORMAT("yyyy年MM月dd日"), /** * yyyy年MM月dd日HH時mm分ss秒 */ ZHCN_TIME_FORMAT("yyyy年MM月dd日HH時mm分ss秒"), /** * yyyy年MM月dd日HH時mm分ss秒SSS毫秒 */ ZHCN_MSEL_FORMAT("yyyy年MM月dd日HH時mm分ss秒SSS毫秒"), /** * yyyyMMdd */ DATE_STR_FORMAT("yyyyMMdd"), /** * yyyyMMddHHmmss */ TIME_STR_FORMAT("yyyyMMddHHmmss"), /** * yyyyMMddHHmmssSSS */ MSEL_STR_FORMAT("yyyyMMddHHmmssSSS"), /** * yyyy-MM-dd HH:mm */ MSEL_MIU_FORMAT("yyyy-MM-dd HH:mm"), /** * yyyyMMddHH */ MS_MIU_FORMAT("yyyyMMddHH"); /** * 日期格式 */ private String timeType; /** * 日期格式 * * @param timeType */ TimeType(String timeType) { this.timeType = timeType; } /** * 獲取日期格式 * * @return */ public String getTimeType() { return timeType; } }
DecimalType 工具類:
/** * <p> * 小數點格式 * </p> * * @author <a href="mailto:yangyanrui@yidianlife.com">xiaoyang</a> * @version V0.0.1 * @date 2019年09月20日 */ public enum DecimalType { /** * 一位 */ one(1, "0.0"), /** * 兩位 */ two(2, "0.00"), /** * 三位 */ three(3, "0.000"), /** * 四位 */ four(4, "0.0000"), /** * 五位 */ five(5, "0.00000"); /** * 日期格式 */ private String decimal; private int scale; /** * 日期格式 * * @param scale * @param decimal */ DecimalType(int scale, String decimal) { this.scale = scale; this.decimal = decimal; } /** * 獲取日期格式 * * @return */ public String getDecimal() { return decimal; } /** * 獲取日期格式 * * @return */ public int getScale() { return scale; } }
附上GitHub地址:https://github.com/yangqiyue/excelgithub