spring动态导入无模板excel

本文介绍了如何在Spring中实现动态导入无模板的Excel数据,包括添加Maven依赖、编写实现层代码以及详细解析Excel表格的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring动态导入无模板excel

导入maven依赖

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.1.6</version>
</dependency>

实现层代码

@Override
public void importExcelUserInfo(MultipartFile file, Long signupId) throws Exception {
    this.signupId=signupId;
    File tofile = multipartFileToFile(file);
    NoModleDataListener noModleDataListener = new NoModleDataListener();
    //这里因为出现过地址指向错误,看自己具体需求是否需要
    noModleDataListener.setSignupUserinfoService(signupUserinfoService);
    //这里调用的是EasyExcel自带的方法不需要自己写
    EasyExcel.read(tofile,noModleDataListener).sheet().doRead();
}

excel数据表格解析

package tech.niua.admin.utils;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.logging.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import tech.niua.admin.domain.FormTemplate;
import tech.niua.admin.domain.SignupUserinfo;
import tech.niua.admin.service.IFormTemplateService;
import tech.niua.admin.service.ISignupUserinfoService;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Slf4j
public class NoModleDataListener extends AnalysisEventListener<Map<Integer, String>> {

    private ISignupUserinfoService signupUserinfoService;

    public ISignupUserinfoService getSignupUserinfoService() {
        return signupUserinfoService;
    }

    public void setSignupUserinfoService(ISignupUserinfoService signupUserinfoService) {
        this.signupUserinfoService = signupUserinfoService;
    }
    //上面的代码根据自己的需求需要修改

    /**
     * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 5;
    List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
    @Override
    public void invoke(Map<Integer, String> data, AnalysisContext context) {
        log.info("解析到一条数据:{}", JSON.toJSONString(data));
        list.add(data);
        if (list.size() >= BATCH_COUNT) {
            saveData();
            list.clear();
        }
    }
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
        list.add(headMap);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        saveData();
        log.info("所有数据解析完成!");
    }
    /**
     * 加上存储数据库
     */
    private void saveData() {
        log.info("{}条数据,开始存储数据库!", list.size());
        log.info("{}输出list!!!",list);
        //注意这里调用自己的保存方法
        signupUserinfoService.saveAll(list);
        log.info("存储数据库成功!");
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值