springboot+maven+easyexcel 动态导入数据(无实体)
2023-09-14 09:04:56 时间
maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
导入攻工具类
public class DynamicEasyExcelListener extends AnalysisEventListener<Map<Integer, String>> {
/**
* 表头数据(存储所有的表头数据)
*/
private List<Map<Integer, String>> headList = new ArrayList<>();
/**
* 数据体
*/
private List<Map<Integer, String>> dataList = new ArrayList<>();
/**
* 这里会一行行的返回头
*
* @param headMap
* @param context
*/
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
//存储全部表头数据
headList.add(headMap);
}
/**
* 这个每一条数据解析都会来调用
*
* @param data
* @param context
*/
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
dataList.add(data);
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
}
public List<Map<Integer, String>> getHeadList() {
return headList;
}
public List<Map<Integer, String>> getDataList() {
return dataList;
}
测试类
public class DynamicEasyExcelImportUtils {
/**
* 动态获取全部列和数据体,默认从第一行开始解析数据
* @param stream
* @return
*/
public static List<Map<String,String>> parseExcelToView(byte[] stream) {
return parseExcelToView(stream, 1);
}
/**
* 动态获取全部列和数据体
* @param stream excel文件流
* @param parseRowNumber 指定读取行
* @return
*/
public static List<Map<String,String>> parseExcelToView(byte[] stream, Integer parseRowNumber) {
DynamicEasyExcelListener readListener = new DynamicEasyExcelListener();
EasyExcelFactory.read(new ByteArrayInputStream(stream)).registerReadListener(readListener).headRowNumber(parseRowNumber).sheet(0).doRead();
List<Map<Integer, String>> headList = readListener.getHeadList();
if(CollectionUtils.isEmpty(headList)){
throw new RuntimeException("Excel未包含表头");
}
List<Map<Integer, String>> dataList = readListener.getDataList();
if(CollectionUtils.isEmpty(dataList)){
throw new RuntimeException("Excel未包含数据");
}
//获取头部,取最后一次解析的列头数据
Map<Integer, String> excelHeadIdxNameMap = headList.get(headList.size() -1);
//封装数据体
List<Map<String,String>> excelDataList = Lists.newArrayList();
for (Map<Integer, String> dataRow : dataList) {
Map<String,String> rowData = new LinkedHashMap<>();
excelHeadIdxNameMap.entrySet().forEach(columnHead -> {
rowData.put(columnHead.getValue(), dataRow.get(columnHead.getKey()));
});
excelDataList.add(rowData);
}
return excelDataList;
}
/**
* 文件导入测试
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//属性项
FileInputStream inputStream = new FileInputStream(new File("文件路径"));
byte[] stream = IoUtils.toByteArray(inputStream);
List<Map<String,String>> dataList = parseExcelToView(stream, 3);
List<String> objects = new ArrayList<>();
dataList.forEach(d->{
objects.addAll(d.keySet());
});
System.out.println("属性项:"+objects);
System.out.println("值:"+dataList);
inputStream.close();
}
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- Spring学习笔记(三十三)——SpringBoot集成Swagger
- Spring学习笔记(三十六)——SpringBoot 实现大文件分片上传、断点续传及秒传
- SpringBoot+Mybatis实现分页查询[通俗易懂]
- SpringBoot整合RabbitMQ 实现五种消息模型 详细教程
- Maven项目导入时,org .apache.maven.plugins依赖爆红报错
- 【Maven】maven打包生成可执行jar文件
- springboot事物oracle,SpringBoot 事务管理
- IDEA SpringBoot整合Mybatis实现增删改查操作
- 最小可用maven+springboot 项目(无法使用外网,但是有maven私库情况)
- SpringBoot 整合mapstruct|赶紧丢掉BeanUtils吧
- Maven:第一章:关于maven依赖死活都下载不了终极解决方案
- SpringBoot(七) - Redis 缓存
- springboot启动类注解_常用设备启动方式分为几类
- SpringBoot实现发送qq邮件
- Maven 下载、安装、配置、本地maven
- Maven配置Tomcat_maven和tomcat的区别
- springboot详细讲解_Springboot项目
- springboot jdbc template_Springboot教程
- springBoot整合Mybatis-Plus需要的依赖_springboot中文手册
- 生成SpringBoot 的maven项目
- SpringBoot 简单集成 Swagger 方法
- 【从零开始】springboot单元测试(一)
- SpringBoot实战:整合MapStruct实现数据类型转化
- java和springboot开发祭祀小程序扫墓系统代祭小程序
- springboot分页功能
- SpringBoot(一)走进Springboot的世界详解编程语言
- SpringMVC和Springboot的区别详解编程语言
- Linux系统快速部署Maven环境(linux安装maven)
- Redis与Maven:实现更高效的技术结合(redis与maven)
- 数据库使用Maven操作Oracle数据库的入门指南(maven中oracle)
- 技巧Redis联合Maven进阶实践配置技巧篇(redis配置maven)