Hutools excel导入导出模版下载工具类
    @RequestMapping("exportContract")
    @ResponseBody
    public void exportContract(HttpServletRequest request, HttpServletResponse response){
        //测试使用的数据( 创建相应的DTO进行处理)
        UserBean bean1 = new UserBean();
        bean1.setName("张三");
        bean1.setId(22);
        bean1.setPassword("333333");

        UserBean bean2 = new UserBean();
        bean2.setName("李四");
        bean2.setId(1);
        bean2.setPassword("4444444");

        //传入list集合数组
        List<UserBean> rows = CollUtil.newArrayList(bean1, bean2);
        String filePath = "/Users/admin/Desktop/";
        String fileName = "u.xls";
        //导出(按实体类JsonProperty注解处理)
        downloadData(rows,UserBean.class,filePath,fileName);
        //模版下载(按实体类JsonProperty注解处理)
        downloadTemplate(UserBean.class,filePath,fileName);
        //导入(按实体类JsonProperty注解处理)
        List<UserBean> userBeans = importData(UserBean.class,filePath,fileName);
        //导入数据校验自己处理userBeans(按实体类JsonProperty注解处理)

    }

    public <T> void downloadTemplate(Class<T> beanType,String filePath ,String fileName) {
        ExcelWriter writer = ExcelUtil.getWriter();
        //下载模版
        writer.setStyleSet(fontStyle(writer.getWorkbook()));
        writer.writeRow(getHeadTitleAndRule(beanType), true);

        File destFile = new File(filePath+fileName);
        writer.flush(destFile);
        System.out.println("write success!");

    }

    /**
     * 默认注解使用JsonProperty
     *
     * @param beanType
     * @return
     */
    public <T> Map<Object, Object> getHeadTitleAndRule(Class<T> beanType) {
        Field[] fields = beanType.getDeclaredFields();
        Map<Object, Object> map = new HashMap<>();
        for (Field field : fields) {
            String alisaName = field.getDeclaredAnnotation(JsonProperty.class).value();
            String ruleStr = field.getDeclaredAnnotation(JsonProperty.class).defaultValue();
            map.put(alisaName, ruleStr);
        }
        return map;
    }



    /**
     * 给规则设置样式
     *
     * @param workbook
     */
    public StyleSet fontStyle(Workbook workbook) {
        StyleSet styleSet = new StyleSet(workbook);
        Font redFont = workbook.createFont();
        redFont.setColor(Font.COLOR_RED);
        styleSet.setFont(redFont, true);

        return styleSet;
    }

    //数据导入工具类
    public <T> List<T> importData(Class<T> beanType,String filePath ,String fileName) {
        ExcelReader excelReader = ExcelUtil.getReader(filePath+fileName);

        Field[] fields = beanType.getDeclaredFields();
        for (Field field : fields) {
            String headName = field.getDeclaredAnnotation(JsonProperty.class).value();
            String fieldName = field.getName();
            excelReader.addHeaderAlias(headName, fieldName);
        }

        List<T> data = excelReader.readAll(beanType);
        for (T t : data) {
            System.out.println(t.toString());
        }
        return data;
    }


    //下载数据
    public <T> void downloadData(List<T> data, Class<T> beanType,String filePath ,String fileName) {
        ExcelWriter excelWriter = ExcelUtil.getWriter();

        Field[] fields = beanType.getDeclaredFields();
        for (Field field : fields) {
            String headName = field.getDeclaredAnnotation(JsonProperty.class).value();
            String fieldName = field.getName();
            excelWriter.addHeaderAlias(fieldName, headName);
        }
        excelWriter.write(data);
        File destFile = new File(filePath+fileName);
        excelWriter.flush(destFile);
        System.out.println("download success!");
    }
package com.example.test.bean;


import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

@Data
public class UserBean {

    @JsonProperty(value = "编号",defaultValue = "1")
    private int id;

    @JsonProperty(value = "姓名",defaultValue = "")
    private String name;

    @JsonProperty(value = "密码",defaultValue = "")
    private String password;
}

 

posted on 2021-07-16 15:31  0027014302yoyoyo  阅读(503)  评论(0)    收藏  举报