依赖jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beat1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>3.0.18.final</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
代码
package com.chinacreator.c2.mop.resource.web.rest;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.fastjson.JSONObject;
import com.chinacreator.c2.util.UUIDUtil;
import com.chinacreator.c2.web.exception.InvalidRestParamException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.Tag;
import com.chinacreator.c2.mop.resource.Deviceinfo;
import com.chinacreator.c2.mop.resource.Optnodeinfo;
import com.chinacreator.c2.mop.resource.Subdeviceinfo;
import com.chinacreator.c2.mop.resource.readmodel.DeviceInfoReadModel;
import com.chinacreator.c2.mop.resource.readmodel.DeviceSubInfoReadModel;
import com.chinacreator.c2.mop.resource.readmodel.OptNodeInfoReadModel;
import com.chinacreator.c2.mop.resource.service.DeviceinfoService;
import com.chinacreator.c2.mop.resource.service.OptnodeinfoService;
import com.chinacreator.c2.mop.resource.service.SubdeviceinfoService ;
@Controller
@Api("资源导入")
@Path("mop/v1/resources")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@SwaggerDefinition(tags = {@Tag(name = "ResourceImport", description = "资源导入")})
@ApiResponses(value = {@ApiResponse(code = 400, message = "错误的请求参数", response = Error.class),
@ApiResponse(code = 404, message = "操作失败,资源未找到", response = Error.class),
@ApiResponse(code = 500, message = "系统内部错误", response = Error.class)})
public class ResourceImport {
@Autowired
private DeviceinfoService deviceinfoService;
@Autowired
private SubdeviceinfoService subdeviceinfoService;
@Autowired
private OptnodeinfoService optnodeinfoService;
public static final String DEVICE_INFO = "deviceinfo";
public static final String DEVICE_SUB_INFO = "devicesubinfo";
public static final String OPT_NODE_INFO = "optnodeinfo";
@POST
@Path("/{resourcetype}")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.MULTIPART_FORM_DATA })
@ApiOperation(value = "预览导入运维资源excel文件(文件要放在请求头里面,文件的参数名为files)", tags = "运维资源导入", notes = "运维资源导入(文件要放在请求头里面,文件的参数名为files)")
public boolean importOptNodeInfo(@PathParam("resourcetype") String resourcetype,
@ApiParam(value = "上传的文件", name = "files") @Context HttpServletRequest request
) {
boolean bool=false;
if(DEVICE_INFO.equals(resourcetype)) {
List<Object> data=getParseExcelObject(DeviceInfoReadModel.class, request);
List<Deviceinfo> deviceInfos=new ArrayList<Deviceinfo>();
List<String> lst=new ArrayList<String>();
for (Object ob : data) {
Deviceinfo deviceInfo= JSONObject.parseObject(ob.toString(),Deviceinfo.class);
String id=deviceInfo.getDevid();
if("null".equals(id)) {
throw new InvalidRestParamException("导入的资产编号不能为空");
}
deviceInfos.add(deviceInfo);
lst.add(id);
}
List<String> ls= deviceinfoService.getAllId();
for (String string : ls) {
for (String string1 : lst) {
if(string.equals(string1)) {
bool=false;
throw new InvalidRestParamException("excel中存在重复的数据,设备ID为"+string);
}
}
}
deviceinfoService.insertBatch(deviceInfos);
bool=true;
}
if(DEVICE_SUB_INFO.equals(resourcetype)) {
List<Object> data=getParseExcelObject(DeviceSubInfoReadModel.class, request);
List<Subdeviceinfo> subdeviceinfos=new ArrayList<Subdeviceinfo>();
List<String> lst=new ArrayList<String>();
for (Object ob : data) {
Subdeviceinfo subdeviceinfo= JSONObject.parseObject(ob.toString(),Subdeviceinfo.class);
subdeviceinfos.add(subdeviceinfo);
String id=subdeviceinfo.getSubdevid();
if("null".equals(id)) {
throw new InvalidRestParamException("导入的子资产编号不能为空");
}
lst.add(id);
}
List<String> ls= subdeviceinfoService.getAllId();
for (String string : ls) {
for (String string1 : lst) {
if(string.equals(string1)) {
bool=false;
throw new InvalidRestParamException("excel中存在重复的数据,子资源编号为"+string);
}
}
}
subdeviceinfoService.insertBatch(subdeviceinfos);
bool=true;
}
if(OPT_NODE_INFO.equals(resourcetype)) {
List<Object> data=getParseExcelObject(OptNodeInfoReadModel.class, request);
List<Optnodeinfo> optnodeinfos=new ArrayList<Optnodeinfo>();
for (Object ob : data) {
Optnodeinfo optnodeinfo= JSONObject.parseObject(ob.toString(),Optnodeinfo.class);
String id = UUIDUtil.createUUID();
optnodeinfo.setId(id);
optnodeinfos.add(optnodeinfo);
}
optnodeinfoService.insertBatch(optnodeinfos);
bool=true;
}
return bool;
}
public List<Object> getParseExcelObject(Class c,HttpServletRequest request){
List<Object> data =null;
InputStream inputstream =null;
ServletFileUpload upload = new ServletFileUpload();
try {
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream fileItemStream = iter.next();
inputstream = fileItemStream.openStream();
data = EasyExcelFactory.read(inputstream, new Sheet(1, 1, c));
}
} catch (FileUploadException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
finally {
try {
inputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return data;
}
}
分享到:
相关推荐
best20182022-10-17 14:55:20原证springboot整合easyexcel实现excel文件上传解析,下载导出简单实例 项目描述 springboot整合easyexcel,上传解析Excel,下载导出Excel 运行环境 jdk8+tomcat9+IntelliJ IDEA+...
easyExcel导出文件的模版
通过以上示例代码,你应该能够理解如何使用EasyExcel库在Java中进行Excel文件的写入操作。这个库提供了简洁的API,使得Excel文件的操作变得非常方便。 总结一下,实现Excel文件写入的步骤包括: 1.引入EasyExcel的...
下面我们将详细探讨如何使用EasyExcel实现并发读取文件字段、进行数据校验、将数据写入新文件以及批量插入到数据库的操作。 1. **EasyExcel介绍** EasyExcel是一款轻量级的Java Excel处理框架,它基于NIO和内存...
下面将详细阐述`easyExcel`的核心功能、使用方法以及如何实现大数据导出。 `easyExcel`的核心特性: 1. **内存优化**:`easyExcel`通过分片读写数据,避免一次性加载大量数据到内存中,从而减少内存占用。 2. **...
前端Excel大文件file slice分片,md5校验文件完整性并作文件标识记录写入数据库,支持断点...文件上传完毕后,使用EasyExcel读取文件流,处理Excel数据写入数据库中,可处理百万级数据。项目完整,连接数据库即可运行。
例如,可以创建一个`importService`,提供`importExcel`方法接收上传的Excel文件,然后通过EasyExcel的`read`方法读取数据,将数据转换为业务对象,最后保存到数据库。同时,也可以创建一个`exportService`,根据...
2. **编写监听器**:EasyExcel提供了监听器接口,通过实现这些接口,我们可以定制数据读取或写入时的行为,如数据转换、异常处理等。 3. **读取Excel**:调用EasyExcel.read()方法,传入文件路径和自定义的监听器,...
3. **写入Excel**:使用`EasyExcel.write()`方法,传入目标文件路径和一个可选的`WriteSheet`实例,`WriteSheet`用于设置写入的表格属性。例如: ```java EasyExcel.write("path_to_output_excel_file", ...
EasyExcel 导出,含动态表头导出
阿里EasyExcel是一款由阿里巴巴开发的轻量级Java库,专门用于处理Excel文件,尤其是数据的导入和导出。它的设计目标是低内存消耗、高效性能和简单易用。在这个"阿里EasyExcel导出案例"中,我们将深入探讨如何利用...
2、项目使用SpringBoot,Ali3.0.5版本的easyexcel框架。 3、资源内有具体的使用说明和易碰到的问题及解决方案,有博主个人联系方式,欢迎来交流。 使用说明: 1、下载资源后请先看readme文档,README.md中有项目的...
在处理大量数据导入数据库的场景中,使用阿里巴巴开源的EasyExcel库结合线程池技术可以有效地实现从Excel文件导入到数据库的过程。先定义sheet的数量和固定大小的线程池数量,每个sheet页做为单独的任务交给线程池...
导出大文件的时候可能会有临时存储, 我的是在C:\Users\xbx\AppData\Local\Temp\poifiles 读csv文件 行数:1048575 hutool: 5205 esayPoi: 3929 easyExcel1: 1917 easyExcel2: 2832 读excel文件 行数:1048575...
导入Excel文件时,使用EasyExcel的`read`方法: ```java public void importExcel(String filePath) { EasyExcel.read(filePath, Student.class, new StudentListener()).sheet().doRead(); } ``` 导出Excel文件...
在使用`EasyExcel`进行大数据文件下载时,我们首先需要了解其基本使用流程: 1. **创建Excel模板**:定义Excel的列名和数据类型,可以通过注解或XML配置来实现。 2. **编写实体类**:根据模板创建对应的Java实体类...
3. **使用EasyExcel写入数据**:调用EasyExcel.write方法,传入文件路径和映射的Java对象,然后遍历数据集,将每条数据写入到对应的Excel行中。 接下来,我们将讨论如何将Excel表中的数据保存到数据库。这个过程...
《阿里EasyExcel 2.1.4:便捷的Excel处理框架》 EasyExcel是阿里巴巴开源的一款强大且易用的Java库,专为处理Excel数据而设计。在版本2.1.4中,它提供了一整套全面的JAR包,支持用户在不依赖具体Model实体类的情况...
最后,使用`EasyExcel.read()`方法读取Excel文件,传入文件路径和监听器即可。 4. **数据读取** EasyExcel提供了两种读取方式:同步读和异步读。同步读适合数据量较小的情况,而异步读则适用于大数据量,通过...
- **写入Excel**:使用`EasyExcel.write()`方法指定文件路径,配合`Sheet`和`Head`设置,即可写入数据。 - **注解映射**:通过在Java对象上添加`@ExcelProperty`注解,将Excel列与对象属性关联。 5. **高级功能**...