欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EasyExcel的导入和导出

程序员文章站 2024-03-20 14:20:52
...

导入:

下面是从http请求流中读取数据流,其他形式的数据流道理相同;

逻辑代码:

    @PostMapping(value = "import", consumes = "multipart/*", headers = "content-type=multipart/form-data")
    public String import(MultipartHttpServletRequest request) {
        log.info("import批量录入数据开始");
        String fileName="";
        try {
            Map<String, MultipartFile> fileMap = request.getFileMap();
            for (Map.Entry<String, MultipartFile> part : fileMap.entrySet()) {
                InputStream inputStream = part.getValue().getInputStream();
                fileName=part.getValue().getOriginalFilename();
                Boolean isExcel = FileUtil.isExcelFile(fileName);//就是判断下扩展名是不是xls、xlsx;
                if (!isExcel) {
                    throw new ValidateException("导入的文件不是excel文件");
                }
                List<Data> data = new LinkedList<>();
                EasyExcel.read(inputStream).head(Data.class).autoTrim(true).registerReadListener(
                        new AnalysisEventListener<ByteArea>() {
                            @Override
                            public void invoke(Data data1, AnalysisContext analysisContext) {
                                data.add(data1);
                            }
                            @Override
                            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                                log.info("读取文件[{}]成功,一共:{}行......", part.getKey(), data.size());
                            }
                        }
                ).doReadAll();//读取所有的sheet;
                importService.import(data);
            }
        } catch (Exception e) {
            log.error("批量录入数据异常", e);
            return "批量录入数据异常";
        }
        return "批量录入数据正常";
    }

类的属性注解中的value要和Excel列头的名字相同,保证Excel数据可以映射到对象的属性中:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Data implements Serializable {

    /**
     * 区域id
     */
    @ExcelProperty("areaCode")
    private String areaCode;
    /**
     * 区域名称
     */
    @ExcelProperty("areaName")
    private String areaName;
    /**
     * 父级id
     */
    @ExcelProperty("fatherId")
    private String fatherId;
    /**
     * 级别
     */
    @ExcelProperty("level")
    private Integer level;
}

POM依赖引入:

<properties>
    <easyExcel.version>2.2.6</easyExcel.version>
</properties>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>${easyExcel.version}</version>
</dependency>

导出:

下面是导出的核心部分代码,可根据实际场景进行调整代码

ByteArrayOutputStream os = new ByteArrayOutputStream();
ExcelWriter excelWriter = EasyExcel.write(os).build();
WriteSheet writeSheet = EasyExcel.writerSheet("第" + (i - 1) + "部分").build();
excelWriter.write(page.getResult(), writeSheet);
excelWriter.finish();
os.close();

相关标签: java java