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("存储数据库成功!");
}
}