我是靠谱客的博主 顺利黑裤,最近开发中收集的这篇文章主要介绍Java实现多个sheet导入controller层处理读操作的方法监听器的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

controller层

public void import(@RequestParam("file") MultipartFile file){
if (Objects.isNull(file) || file.isEmpty()) {
            throw new WarnMessageException("导入文件为空");
        }
        // 文件名
        String fileName = file.getOriginalFilename();
        String suffixName = fileName.substring(fileName.lastIndexOf(SymbolConst.SEPARATION_DOT));
        if (!"xlsx".equals(suffixName)) {
            throw new WarnMessageException("文件格式必须为.xlsx格式");
        }
        List<TrackPointInfoExcelDTO> trackPointInfoExcelDTOList;
        List<TrackDataTransInfoExcelDTO> transInfoExcelDTOList;
        List<TrackTriggerRuleExcelDTO> triggerRuleExcelDTOList;

        try {
            InputStream in = file.getInputStream();
            // 读取第一个sheet,从第二行开始读取 
            trackPointInfoExcelDTOList = ExcelExportAction.readImportExcel(in, TrackPointInfoExcelDTO.class, 0);
            //读取第二个sheet
            InputStream inputStream = file.getInputStream();
            transInfoExcelDTOList = ExcelExportAction.readImportExcel(inputStream, TrackDataTransInfoExcelDTO.class, 1);
            //读取第三个sheet
            InputStream fileInputStream = file.getInputStream();
            triggerRuleExcelDTOList = ExcelExportAction.readImportExcel(fileInputStream, TrackTriggerRuleExcelDTO.class, 2);
        } catch (Exception e) {
            throw new WarnMessageException("文件导入失败!,错误信息:" + e.getMessage());
        }

    //service层处理数据 可以自己写    
    trackPointRestService.importTrackInfo(trackPointInfoExcelDTOList, transInfoExcelDTOList,
                triggerRuleExcelDTOList, userId, userName);

}

处理读操作的方法

public static <T> List<T> readImportExcel(InputStream in, Class<T> objectClass, Integer sheetNo) {
//此处的监听器是我自己写的
        ExcelListener<T> excelListener = new ExcelListener<>();
        ExcelReaderBuilder readerBuilder = EasyExcel.read(in, objectClass, excelListener);
        ExcelReader reader = readerBuilder.build();
        ReadSheet readSheet = new ReadSheet(sheetNo);
        reader.read(readSheet);
        reader.finish();
        return excelListener.getRows();
    }

监听器的实现

public class ExcelListener<T> extends AnalysisEventListener<T> {

    private final List<T> rows = new ArrayList<>();

    @Override
    public void invoke(T model, AnalysisContext var2) {
        log.info("读取数据:{}", JsonHelper.toJson(model));
        if (!isBlankRowData(model)) {
            rows.add(model);
            return;
        }
        rows.add(model);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext var1) {
        log.info("read {} rows", rows.size());
    }

    public List<T> getRows() {
        return rows;
    }

    /**
     * 是否是空行
     *
     * @param model model
     * @return true 是空行、 false 不是空行
     */
    private boolean isBlankRowData(T model) {
        return StringUtils.isEmpty(JsonHelper.toJson(model));
    }
}

最后

以上就是顺利黑裤为你收集整理的Java实现多个sheet导入controller层处理读操作的方法监听器的实现的全部内容,希望文章能够帮你解决Java实现多个sheet导入controller层处理读操作的方法监听器的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部