EasyExcel读取web端Excel文件遇到LinkHashMap转换为自定义类型的解决方案

LinkHashMap类型转换的问题
今天在使用EasyExcel过程中,使用文件流作为参数调用EasyExcel.read(InputStream).do返回的参数是LinkHashMap,但是由于功能需要把返回的参数转换成自定义的类型。

天亮编写问题解决方法。
1.最简单的方法是换个接口,因为这个EasyExcel.read()重载了好几个函数,阅读源码发现还有另外一种调用方式可以直接返回自定义对象的List

    public void uploadExcel(MultipartFile file, String filecode) throws IOException {
        EasyExcel.read(file.getInputStream(), RecycleDomain.class,new RecycleListener(filecode,recycleMapper)).sheet().doRead();
    }

其中file.getInputStream()获取web端传入文件的输入流,RecyckeDomain是接收一行Excel文件数据的javaBean,RecycleListener()是自定义的监听器
2.第二种方法就比较弟弟了
List 数据是字典形式的
0:对象1
1:对象2
2:对象3
那么就需要首先一个for循环通过“键值”每次取出一个对象,然后用这个对象初始化自己声明的对象,再把自己的对象添加到list里面,这样就完成了List到List<自定义bean>的转换。
废话不多说贴代码:
这里发先已经有些好的了,之际引用别人的了
EasyExcel 文件流读取,List转换成List<自定义类>
为防止丢失这里copy一份
1.pom.xml中引入依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.2.0-beta2</version>
</dependency>

2.工具类:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class EasyExcels {

    /**
     *
     * @param file 导入的Excel文件
     * @param tClass  对应excel实体bean
     * @return 对应excel实体bean的list
     */
    public static<T> List<Map<String ,String>> getExcelContent(MultipartFile file, Class<T> tClass){
        List<Map<String ,String>> excelPropertyIndexModelList = new ArrayList<>();
        try {
            //监听器
            AnalysisEventListener<Map<String ,String>> listener = new AnalysisEventListener<Map<String ,String>>() {
                //读取每一行的数据
                @Override
                public void invoke(Map<String ,String> excelPropertyIndexModel, AnalysisContext analysisContext) {
                    excelPropertyIndexModelList.add(excelPropertyIndexModel);
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                    //读取之后的操作
                }
            };
            /* file.getInputStream() 输入流
             * listener 自定义的监听器
             */
            ExcelReader excelReader = EasyExcel.read(file.getInputStream(),  listener).build();
            //readSheet(0) 指定读取哪一页的数据
            ReadSheet sheet = EasyExcel.readSheet(0).build();
            excelReader.read(sheet);
            //读取所有的sheet页的数据
            //excelReader.readAll();
            //关闭,读的时候会创建临时文件,到时磁盘会崩的
            excelReader.finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return excelPropertyIndexModelList;
    }

}

3.业务层代码

  @ApiOperation(value = "Excel导入", notes="月份统计数据Excel导入接口")
    @PostMapping(value = "/importExcel")
    @ResponseBody
    public String updateExcel(@Param("Filedata") MultipartFile file){
        try {
            List<Map<String ,String>> excelContentList = EasyExcels.getExcelContent(file, Month.class);
            List<Month> monthList = new ArrayList<>();
            for (int i =1;i<excelContentList.size();i++){
                Month month = new Month();
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = format.parse(format.format(new Date()));
                Map<String ,String> list = excelContentList.get(i);
                if (list.size()>0) {
                    month.setYear(Integer.valueOf(list.get(0)));
                    month.setMonth(Integer.valueOf(list.get(1)));
                    month.setDatatype(Integer.valueOf(list.get(2)));
                    month.setAmount(Integer.valueOf(list.get(3)));
                    month.setPercent(Float.valueOf(list.get(4)));
                    month.setUpdatetime(date);
                    Long id = snowFlake.nextId();
                    month.setPk(id.intValue());
                    System.out.println(JSON.toJSON(month));
                    monthList.add(month);
                }
            }
}

4.Excel表格
在这里插入图片描述5.数据库表字段
在这里插入图片描述6.运行结果
在这里插入图片描述在这里插入图片描述
第二种解决方法推荐大家去上面提供的链接去看。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
EasyExcel是一款基于Java的开源工具,用于读取和写入Excel文件。它提供了简单易用的API,可以方便地进行Excel文件的读写操作。 使用EasyExcel读取Excel文件非常简单,只需按照以下步骤进行操作: 1. 引入EasyExcel的依赖包。 2. 创建一个Java类,作为数据模型,用于存储读取到的Excel数据。 3. 使用EasyExcel提供的API,打开Excel文件读取数据。 4. 将读取到的数据存储到数据模型中。 5. 关闭Excel文件。 以下是使用EasyExcel读取Excel文件的示例代码: ```java // 引入EasyExcel的依赖包 import com.alibaba.excel.EasyExcel; // 创建数据模型类 public class ExcelData { private String name; private int age; // 其他属性... // getter和setter方法... } // 读取Excel文件 public class ReadExcel { public static void main(String[] args) { // Excel文件路径 String filePath = "path/to/excel/file.xlsx"; // 使用EasyExcel提供的API,打开Excel文件读取数据 EasyExcel.read(filePath, ExcelData.class, new ExcelDataListener()).sheet().doRead(); } } // 自定义监听器类,用于处理读取到的数据 public class ExcelDataListener extends AnalysisEventListener<ExcelData> { // 重写父类的方法,处理每一行读取到的数据 @Override public void invoke(ExcelData data, AnalysisContext context) { // 将读取到的数据存储到数据模型中,可以进行自定义操作 System.out.println("Name: " + data.getName()); System.out.println("Age: " + data.getAge()); // 其他操作... } // 重写父类的方法,读取完成后的操作 @Override public void doAfterAllAnalysed(AnalysisContext context) { // 关闭Excel文件等资源 } } ``` 以上就是使用EasyExcel读取Excel文件的简单介绍和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值