Java中excel的导出导入

spring boot项目:
pom.xml:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
 <!--  <parent>
       <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.8.RELEASE</version>
    </parent>   -->
    <parent>
		<groupId>com.sunwave</groupId>
		<artifactId>Sunwave-Parent</artifactId>
		<version>2.0.0</version>
	</parent> 
    <artifactId>sunwave-cpe</artifactId>
    <name>sunwave-cpe</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>           
        </dependency>

  <dependency>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
</dependency>
   <!--注册中心 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			 <!-- <version>2.0.3.RELEASE</version> -->			
		</dependency>		
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
			<!-- <version>2.0.2.RELEASE</version> -->
		</dependency>	
		
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--  RabbitMQ -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency> -->

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.6</version>
        </dependency> 
 
    </dependencies>

   <!--  <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>打包
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 -->
 <build>
    <plugins>
     <plugin>
	    <groupId>org.apache.maven.plugins</groupId>
	    <artifactId>maven-compiler-plugin</artifactId>	   
	  <configuration>
		<verbose>true</verbose>
		<fork>true</fork>
		<executable>${JAVA8_HOME}/bin/javac</executable>
	  </configuration>
     </plugin>
   </plugins>
</build>

    <packaging>war</packaging>

</project>

excel的导入:

 @ResponseBody
	@SuppressWarnings("deprecation")
	@RequestMapping(value="/uploadExcel",method = RequestMethod.POST)	
	public Json uploadExcel(HttpServletRequest request) {
		StandardMultipartHttpServletRequest multiRequest = (StandardMultipartHttpServletRequest) request;
		Iterator<String> iter = multiRequest.getFileNames();  
		String rootPath= request.getRealPath("/");  
		String relativePath = StaticParam.imageBaseDir+File.separator+StaticParam.floorImageBaseDir+File.separator;
		String basePath = rootPath+File.separatorChar+relativePath;
		String imagePath = null;
		String name= iter.hasNext() ? iter.next() : null; 
		MultipartFile file = multiRequest.getFile(name);
		if(file != null) {
			String filename = file.getOriginalFilename();
			if (!filename.endsWith(".xls") && !filename.endsWith(".xlsx")) {
				return new Json(false, "导入失败,导入的文件必须是以xls或者xlsx结尾的Excel文件!");
			} else {
				imagePath = UploadUtil.upload(multiRequest,basePath, name);
				return new Json(true);
			}
		}
		
		return new Json(false, "请选择需要导入的文件");
        
	}

工具类1:

package com.sunwave.common;

public class StaticParam {
	
	public static String imageBaseDir = "upload";
	public static String floorImageBaseDir = "floorImage";

}

工具类2:

package com.sunwave.deviceManagement.domain.upgrade;

public class Json implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6493265179641167222L;

	private boolean success = false;

	private String msg = "";

	private Object obj = null;
	
	public Json() {}
	
	public Json(boolean success) {
		this.success = success;
	}
	
	public Json(boolean success, String msg) {
		this.success = success;
		this.msg = msg;
	}

	public boolean isSuccess() {
		return success;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}
	
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
	
	public void addMsg(String msg) {
		this.msg += msg;
	}

	public Object getObj() {
		return obj;
	}

	public void setObj(Object obj) {
		this.obj = obj;
	}

}

工具类3:

package com.sunwave.utils;

import java.io.File;
import java.io.IOException;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;

/*文件上传实用类*/
public class UploadUtil {

    /**
     * @param request
     * @param basedir  基础文件夹,一般表示用户
     * @param filename 文件名
     * @return
     */
    public static String upload(StandardMultipartHttpServletRequest request, String basedir,
                                String filename) {
        String path = null;
        String relativePath = null;
        StandardMultipartHttpServletRequest multiRequest = (StandardMultipartHttpServletRequest) request;
        MultipartFile file = multiRequest.getFile(filename);
        if (file != null) {
            /*String name = file.getName();*/
            String fileName = file.getOriginalFilename();
            if (fileName.lastIndexOf(File.separator) != -1) {
//				fileName = fileName.substring(fileName.lastIndexOf(File.separator),fileName.length());
            }
            String backString = fileName.substring(fileName.lastIndexOf("."), fileName.length());
            fileName = System.currentTimeMillis() + backString;
            /*String fileTruename = fileName.substring(fileName.lastIndexOf(File.separator),fileName.length());*/
            path = basedir + File.separator + fileName;
            relativePath = fileName;
            File localFile = new File(path);
            if (!localFile.getParentFile().exists()) {
                localFile.getParentFile().mkdirs();
            }
            try {
                file.transferTo(localFile);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("path" + path);
        return relativePath;
    }

}

excel的导出:

实体类:

package com.sunwave.grouping.domain;

import javax.persistence.*;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.sunwave.deviceManagement.controller.NeElementController;
import com.sunwave.vo.Result;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;



/**
 * @author lfw
 * @date   2020年8月3日
 * @time   下午6:44:54
 * 
 */
@Entity
@Table(name = "ne_element")
public class NeElement extends BaseRowModel implements Serializable{

	/**
	 * extends BaseRowModel
	 * 导出excel需要继承 BaseRowModel,还要添加@ExcelProperty()注解
	 */
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long neNeid; //设备唯一标识
	@ExcelProperty(value="设备连接URL")
	private String coonReqUrl; //设备连接URL
	@ExcelProperty(value="设备序列号")
	private String serialNumber; //设备序列号
	@ExcelProperty(value="设备IP")
	private String deviceIp;  //设备IP
	@ExcelProperty(value="modelId")
	private String modelId;//modelName对应的id
	@ExcelProperty(value="描述")
	private String description;//描述
	@ExcelProperty(value="制造商")
	private String manufacturer;//制造商
	@ExcelProperty(value="软件版本")
	private String softwareVersion;//软件版本
	@ExcelProperty(value="创建时间")
	private Date creationTime;//创建时间
	@ExcelProperty(value="lastBootstrapTime")
	private Date lastBootstrapTime;
	@ExcelProperty(value="最后连接时间")
	private Date lastConnTime;//最后连接时间
	@ExcelProperty(value="更新时间")
	private Date updateTime;//更新时间
	@ExcelProperty(value="oui")
	private String oui;//oui
	@ExcelProperty(value="product")
	private String product;
	@ExcelProperty(value="是否需要认证")
	private Boolean authRequirement;//是否需要认证
	@ExcelProperty(value="dialectIP")
	private String dialectIP;
	@ExcelProperty(value="更新用户")
	private String updateUser;//更新用户
	@ExcelProperty(value="mac地址")
	private String macAddress;//mac地址
	@ExcelProperty(value="在线状态")
	private Integer onlineStatus;//在线状态
	@ExcelProperty(value="会话状态")
	private Integer sessionStatus;//会话状态
	@ExcelIgnore
    @ManyToMany(cascade=CascadeType.ALL, mappedBy = "elementList")
    @JsonIgnore
	private List<DeviceGroup> deviceGroupList=new ArrayList<DeviceGroup>();
	@Transient
	private String lastVisitTime;
	@Transient
	private String lastRebootTime;
	@Transient
	private String modelName;
	
	private Integer isFavourite;//是否喜欢
	
	

	public Integer getIsFavourite() {
		return isFavourite;
	}

	public void setIsFavourite(Integer isFavourite) {
		this.isFavourite = isFavourite;
	}

	public String getModelName() {
		return modelName;
	}

	public void setModelName(String modelName) {
		this.modelName = modelName;
	}

	public String getLastVisitTime() {
		return lastVisitTime;
	}

	public void setLastVisitTime(String lastVisitTime) {
		this.lastVisitTime = lastVisitTime;
	}

	public String getLastRebootTime() {
		return lastRebootTime;
	}

	public void setLastRebootTime(String lastRebootTime) {
		this.lastRebootTime = lastRebootTime;
	}

	public List<DeviceGroup> getDeviceGroupList() {
	return deviceGroupList;
}
   public void setDeviceGroupList(List<DeviceGroup> deviceGroupList) {
	this.deviceGroupList = deviceGroupList;
}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getManufacturer() {
		return manufacturer;
	}

	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}

	public String getSoftwareVersion() {
		return softwareVersion;
	}

	public void setSoftwareVersion(String softwareVersion) {
		this.softwareVersion = softwareVersion;
	}

	public Date getLastConnTime() {
		return lastConnTime;
	}

	public void setLastConnTime(Date lastConnTime) {
		this.lastConnTime = lastConnTime;
	}

	public String getModelId() {
		return modelId;
	}

	public void setModelId(String modelId) {
		this.modelId = modelId;
	}

	public Long getNeNeid() {
		return neNeid;
	}

	public void setNeNeid(Long neNeid) {
		this.neNeid = neNeid;
	}

	public String getCoonReqUrl() {
		return coonReqUrl;
	}

	public void setCoonReqUrl(String coonReqUrl) {
		this.coonReqUrl = coonReqUrl;
	}

	public String getDeviceIp() {
		return deviceIp;
	}

	public void setDeviceIp(String deviceIp) {
		this.deviceIp = deviceIp;
	}



	public String getSerialNumber() {
		return serialNumber;
	}

	public void setSerialNumber(String serialNumber) {
		this.serialNumber = serialNumber;
	}

	public Date getCreationTime() {
		return creationTime;
	}

	public void setCreationTime(Date creationTime) {
		this.creationTime = creationTime;
	}

	public Date getLastBootstrapTime() {
		return lastBootstrapTime;
	}

	public void setLastBootstrapTime(Date lastBootstrapTime) {
		this.lastBootstrapTime = lastBootstrapTime;
	}

	public Date getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}

	public String getOui() {
		return oui;
	}

	public void setOui(String oui) {
		this.oui = oui;
	}

	public String getProduct() {
		return product;
	}

	public void setProduct(String product) {
		this.product = product;
	}

	public Boolean getAuthRequirement() {
		return authRequirement;
	}

	public void setAuthRequirement(Boolean authRequirement) {
		this.authRequirement = authRequirement;
	}

	public String getDialectIP() {
		return dialectIP;
	}

	public void setDialectIP(String dialectIP) {
		this.dialectIP = dialectIP;
	}

	public String getUpdateUser() {
		return updateUser;
	}

	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}

	public String getMacAddress() {
		return macAddress;
	}

	public void setMacAddress(String macAddress) {
		this.macAddress = macAddress;
	}

	public Integer getOnlineStatus() {
		return onlineStatus;
	}

	public void setOnlineStatus(Integer onlineStatus) {		
		this.onlineStatus = onlineStatus;
	}

	public Integer getSessionStatus() {
		return sessionStatus;
	}

	public void setSessionStatus(Integer sessionStatus) {
		this.sessionStatus = sessionStatus;
	}

	
	
}

核心代码:

import com.alibaba.excel.metadata.Sheet;

 @ResponseBody
		@ApiOperation(value = "导出excel",httpMethod="GET") 
	    @GetMapping("/exportExcel")
		public  Result exportExcel(HttpServletResponse response,@RequestBody GroupVo groupVo) {	
			logger.info("Enter into NeElementController.exportExcel");
			try { 
				List<NeElement> list=new ArrayList<NeElement>();
				for (int j = 0; j <groupVo.getNeIdList().size(); j++) {
					Long neId =  groupVo.getNeIdList().get(j);		         		           
				    NeElement element = neElementService.getElementExcel(neId);	//根据id查询,NeElement是实体。			
				  //  neElementService.onlineStatus(neId);
			        list.add(element);
				}
				Sheet sheet = new Sheet(1, 0,NeElement.class);
			  ExportUtil.doExportExcel(response, "Element", "sheet1", sheet, list);
				
			}catch (Exception e) {
			   logger.error("Error in NeElementController.exportExcel()" + e.getMessage());			   
			return Result.failure(100, "导出失败");
				   
		    }		
			logger.info("Exist NeElementController.exportExcel()");
			return 	 Result.ok("导出成功");
			
		}
	 

工具类1:

package com.sunwave.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.HashMap;
import java.util.Map;


@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> {

    private static final String CODE = "code";
    private static final String MSG = "msg";

    private Integer code=200;
    private String msg="操作成功";
    private String description;
    private T data;

    private HashMap<String,Object> exend;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public Result setData(T data) {
        this.data = data;
        return this;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @JsonIgnore
    public HashMap<String, Object> getExend() {
        return exend;
    }

    public void setExend(HashMap<String, Object> exend) {
        this.exend = exend;
    }

    public Result() {
        exend = new HashMap<>();
    }

    public static Result failure(int code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    public static Result ok(String msg) {
        Result result = new Result();
        result.put("msg", msg);
        return result;
    }

    public static Result ok(Map<String, Object> map) {
        Result result = new Result();
        result.exend.putAll(map);
        return result;
    }

    public static Result ok() {
        return new Result();
    }

    public Result put(String key, Object value) {
        exend.put(key, value);
        return this;
    }
}

工具类2:

package com.sunwave.vo;

import java.io.Serializable;
import java.util.ArrayList;

public class GroupVo implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String fileId;
	private ArrayList<Long> neIdList = new ArrayList<Long>();
	private ArrayList<String> groupIdList = new ArrayList<String>();
	
	
	public String getFileId() {
		return fileId;
	}
	public void setFileId(String fileId) {
		this.fileId = fileId;
	}
	public ArrayList<Long> getNeIdList() {
		return neIdList;
	}
	public void setNeIdList(ArrayList<Long> neIdList) {
		this.neIdList = neIdList;
	}
	public ArrayList<String> getGroupIdList() {
		return groupIdList;
	}
	public void setGroupIdList(ArrayList<String> groupIdList) {
		this.groupIdList = groupIdList;
	}
	@Override
	public String toString() {
		return "GroupVo [fileId=" + fileId + ", neIdList=" + neIdList + ", groupIdList=" + groupIdList + "]";
	}
	
	

}

工具类3:

package com.sunwave.utils;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;


import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;

/**
 *  阿里easyexcel  xlsx导出
 */
public class ExportUtil {

 /**
  *  xlsx导出
  * @param response   HttpServletResponse
  * @param fileName   文件名称
  * @param sheetName   sheet名称
  * @param sheet    Sheet sheet = new Sheet(1, 0,UserDTO.class);需要被导出的实体类,实体类需要继承BaseRowModel
  * @param list    需要导出的数据集
  * @throws IOException
  */
 @SuppressWarnings({ "deprecation", "rawtypes" }) 
 public static void doExportExcel(HttpServletResponse response,String fileName,String sheetName,Sheet sheet,List list) throws IOException
 {
   ServletOutputStream out = response.getOutputStream();
         ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
         //设置自适应宽度      
         sheet.setAutoWidth(Boolean.TRUE);
         // 第一个 sheet 名称
         sheet.setSheetName(sheetName);
         writer.write(list, sheet);
         //通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
         response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
         writer.finish();
         response.setContentType("multipart/form-data");
         response.setCharacterEncoding("utf-8");
         out.flush();
 } 
}

🆗了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值