快速入门,使用EasyExcel导入导出文件

maven依赖包
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>1.1.2-beta5</version>
</dependency>

<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
</dependency>
一:集成Util

一般而言,除去业务逻辑操作之外,文件的导入导出操作应该是通用的,使用easyexcel进行导入导出操作,需要实体类继承BaseRowModel,因此我们可以基于easyexcel集成一个工具类:ExcelUtils

二:将前端上传的文件转换成对象列表
public static <T extends BaseRowModel> List<T> convertFile2ImportList(MultipartFile file, Class<T> clazz) {
        if (null == file) {
            throw new IllegalArgumentException("文件不能为空");
        }
        if (StringUtils.isBlank(file.getOriginalFilename())) {
            throw new IllegalArgumentException("文件名不能为空");
        }
        String fileName = file.getOriginalFilename();
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        if (!(Constants.EXCEL_03_SUFFIX.equals(suffix) || Constants.EXCEL_07_SUFFIX.equals(suffix))) {
            throw new IllegalArgumentException("文件格式不正确");
        }

        List<Object> objList;
        try {
            objList = EasyExcelFactory.read(file.getInputStream(), new Sheet(1, 1, clazz));
        } catch (IOException e) {
            throw new RuntimeException("", "");
        }
        List<T> list = objList.stream().map(obj -> (T) obj).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(list)) {
            throw new IllegalArgumentException("表格的数据不能为空");
        }
        if (list.size() > Constants.EXCEL_MAX_SIZE) {
            throw new IllegalArgumentException("表格的数据不能超过" + Constants.EXCEL_MAX_SIZE + "行");
        }

        return list;
    }

**关于EasyExcelFactory.read()这个方法,对于读取内容的大小有限制,一般不宜超过1000行,有时间再写关于导出的内容,本次就只写个能快速使用的实例。

三:导出数据
public static void exportExcel(Class<? extends BaseRowModel> clazz, String fileName, String sheetName, HttpServletResponse response, List<? extends BaseRowModel> data) {
    try {
        ExcelWriter writer = EasyExcelFactory.getWriter(response.getOutputStream());
        List<List<String>> head = new ArrayList<>();
        ExcelHeadProperty excelHeadProperty = new ExcelHeadProperty(clazz, head);

        Sheet sheet = new Sheet(1, 1);
        sheet.setHead(excelHeadProperty.getHead());
        sheet.setSheetName(sheetName);
        setSheetStyle(sheet);

        downloadExcel(writer, fileName, sheet, response, data);
    } catch (IOException e) {
        log.error("下载" + fileName + "失败: " + e);
        throw new RuntimeException(ErrCodeEnum.FILE_DOWNLOAD_FAIL);
    }
}

DownlodaExcel:

private static void downloadExcel(ExcelWriter writer, String fileName, Sheet sheet, HttpServletResponse response, List<? extends BaseRowModel> data) throws IOException {
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition",
                "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        writer.write(data, sheet);
        writer.finish();
        response.getOutputStream().flush();
    }

SheetStyle:

private static void setSheetStyle(Sheet sheet) {
    sheet.setTableStyle(ExcelUtils.createTableStyle());
    sheet.setAutoWidth(true);

}

private static TableStyle createTableStyle() {
    TableStyle tableStyle = new TableStyle();
    Font headFont = new Font();
    headFont.setBold(true);
    headFont.setFontHeightInPoints((short) 13);
    headFont.setFontName("楷体");
    tableStyle.setTableHeadFont(headFont);
    tableStyle.setTableHeadBackGroundColor(IndexedColors.LIGHT_GREEN);


    Font contentFont = new Font();
    contentFont.setFontHeightInPoints((short) 12);
    contentFont.setFontName("楷体");
    tableStyle.setTableContentFont(contentFont);
    tableStyle.setTableContentBackGroundColor(IndexedColors.WHITE);

    return tableStyle;
}
四:导出文件到本地
public static void exportExcel2Local(List<? extends BaseRowModel> data, Class<? extends BaseRowModel> clazz, String fileName) {
    //去掉后缀
    String suffix = fileName.substring(fileName.lastIndexOf("."));
    fileName = fileName.replace(suffix, "");
    String current = DateUtils.format(new Date(), DateUtils.DATETIME_PATTERN);
    File dir = new File("D:\\uploadResult");
    if (!dir.exists()) {
        dir.mkdir();
    }
    File file = new File(fileName + "结果" + current + suffix);
    if (!file.exists()) {
        try {
            file.createNewFile();
        } catch (IOException e) {
            log.error("创建文件失败");
            return;
        }
    }
    String path = dir.getPath() + "\\" + file.getPath();
    try (OutputStream os = new FileOutputStream(path)) {
        ExcelWriter writer = EasyExcelFactory.getWriter(os);
        Sheet sheet = new Sheet(1, 0, clazz);
        writer.write(data, sheet);
        writer.finish();
    } catch (IOException e) {
        log.error("批量导入失败: " + e);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值