开始准备工作,需要使用到的工具类放到了最后

1、pom文件添加依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version>
</dependency>

 2、 先实现导出

编写导出的实体类

你要导出那些字段就写那些字段 案例如下:

@Data
@HeadRowHeight(value = 35)
@ContentRowHeight(value = 25)
public class Student_export implements Serializable {@ExcelProperty({"学生信息","编号"})private Integer id;@ExcelProperty({"学生信息","姓名"})private String name;@ExcelProperty({"学生信息","年龄"})private String age;@ExcelProperty({"学生信息","性别"})private String sex;@ExcelProperty({"学生信息","手机号"})private String phone;@ExcelProperty({"学生信息","QQ"})private String QQ;@ExcelProperty({"学生信息","微信"})private String weixin;@ExcelProperty({"学生信息","咨询员id"})private String netpusherId;@ExcelIgnoreprivate String stuStatus;@ExcelProperty({"学生信息","状态"})private String stuStatusName;public String getStuStatusName() {if("1".equals(this.stuStatus)){return  stuStatus = "已录入未分配" ;}  else if("2".equals(this.stuStatus)){return  stuStatus = "已分配咨询师" ;}else if("3".equals(this.stuStatus)){return  stuStatus = "正在跟踪" ;}else if("4".equals(this.stuStatus)){return  stuStatus = "跟踪结束(已缴费)" ;}else if("5".equals(this.stuStatus)){return  stuStatus = "跟踪结束(失败)" ;}return stuStatus;}@ExcelProperty({"学生信息","咨询员姓名"})private String createUser;@ExcelProperty({"学生信息","咨询师id"})private String askerId;@ExcelProperty({"学生信息","咨询师姓名"})private String ziXunName;@ExcelProperty({"学生信息","创建时间"})private String createTime;@ExcelIgnoreprivate String isPay;@ExcelProperty({"学生信息","是否付款"})private String isPayName;public String getIsPayName(){if ("0".equals(this.isPay)){return isPay = "未付款";}else if ("1".equals(this.isPay)){return isPay = "已付款";}return isPay;}@ExcelProperty({"学生信息","付款时间"})private String payTime;@ExcelProperty({"学生信息","付款金额"})private String money;

实现导出核心实现代码:

public void  exportMember(HttpServletResponse response, Students students){//全查需要导出的数据
List<Student_export> list = studentsService.exportStudent(students);//执行导出 student_demo是导出的文件名 students是excel文件的下方的sheet名称  ExcelUtil.export(response,"student_demo","students",list,Student_export.class);
}

 实现导入

导入和导出同理,先根据导入文件那些内容,书写实体类 案例如下:

@Data
@HeadRowHeight(value = 35)
@ContentRowHeight(value = 25)
public class Student_import implements Serializable {@ExcelProperty({"学生信息","编号"})private Integer id;@ExcelProperty({"学生信息","姓名"})private String name;@ExcelProperty({"学生信息","年龄"})private String age;@ExcelProperty({"学生信息","性别"})private String sex;@ExcelProperty({"学生信息","手机号"})private String phone;@ExcelProperty({"学生信息","QQ"})private String QQ;@ExcelProperty({"学生信息","微信"})private String weixin;}

实现导入核心实现代码:

    public Map<String,Object> importMember(MultipartFile file,Integer netpusherId,String createUser){List<Student_import> importList = ExcelUtil.importExcel(file, Student_import.class,null);System.out.println("读取完成");// 复制集合:把improtList 复制到 一个新的集合List<Students> studentsList = ObjectConversion.copy(importList,Students.class);//执行保存for (Students s:studentsList){s.setNetpusherId(netpusherId);s.setCreateUser(createUser);}Boolean rsl= studentsService.saveBatch(studentsList);Map<String, Object> rslmap = new HashMap<>();rslmap.put("code", rsl ? "0" : "1");rslmap.put("msg", rsl ? "导入成功" : "导入失败");return rslmap;}

使用到的工具类

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;/*** excel工具类* 使用的是alibaba的easyExcel*/
public class ExcelUtil {/*** 写出一个 excel 文件到本地* <br />* 将类型所有加了 @ExcelProperty 注解的属性全部写出** @param fileName  文件名 不要后缀* @param sheetName sheet名* @param data      写出的数据* @param clazz     要写出数据类的Class类型对象* @param <T>       写出的数据类型*/public static <T> void writeExcel(String fileName, String sheetName, List<T> data, Class<T> clazz) {writeExcel(null, fileName, sheetName, data, clazz);}/*** 按照指定的属性名进行写出 一个 excel** @param attrName  指定的属性名 必须与数据类型的属性名一致* @param fileName  文件名 不要后缀* @param sheetName sheet名* @param data      要写出的数据* @param clazz     要写出数据类的Class类型对象* @param <T>       要写出的数据类型*/public static <T> void writeExcel(Set<String> attrName, String fileName, String sheetName, List<T> data, Class<T> clazz) {fileName = StringUtils.isBlank(fileName) ? "学生管理系统" : fileName;sheetName = StringUtils.isBlank(sheetName) ? "sheet0" : sheetName;try (FileOutputStream fos = new FileOutputStream(fileName)) {write(fos, attrName, sheetName, data, clazz);} catch (Exception exception) {exception.printStackTrace();}}/*** 读取 指定格式的 excel文档** @param fileName 文件名* @param clazz    数据类型的class对象* @param <T>      数据类型* @return*/public static <T> List<T> readExcel(String fileName, Class<T> clazz) {return readExcel(fileName, clazz, null);}/*** 读取 指定格式的 excel文档* 注意一旦传入自定义监听器,则返回的list为空,数据需要在自定义监听器里面获取** @param fileName     文件名* @param clazz        数据类型的class对象* @param readListener 自定义监听器* @param <T>          数据类型* @return*/public static <T> List<T> readExcel(String fileName, Class<T> clazz, ReadListener<T> readListener) {try (FileInputStream fis = new FileInputStream(fileName)) {return read(fis, clazz, readListener);} catch (Exception exception) {exception.printStackTrace();}return null;}/*** 导出  一个 excel* 导出excel所有数据** @param response* @param fileName  件名 最好为英文,不要后缀名* @param sheetName sheet名* @param data      要写出的数据* @param clazz     要写出数据类的Class类型对象* @param <T>       要写出的数据类型*/public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> data, Class<T> clazz) {export(response, null, fileName, sheetName, data, clazz);}/*** 按照指定的属性名进行写出 一个 excel** @param response* @param attrName  指定的属性名 必须与数据类型的属性名一致* @param fileName  文件名 最好为英文,不要后缀名* @param sheetName sheet名* @param data      要写出的数据* @param clazz     要写出数据类的Class类型对象* @param <T>       要写出的数据类型*/public static <T> void export(HttpServletResponse response, Set<String> attrName, String fileName, String sheetName, List<T> data, Class<T> clazz) {fileName = StringUtils.isBlank(fileName) ? "student-system-manager" : fileName;sheetName = StringUtils.isBlank(sheetName) ? "sheet0" : sheetName;response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setCharacterEncoding("utf-8");response.addHeader("Content-disposition", "attachment;filename=" + fileName + ExcelTypeEnum.XLSX.getValue());try (OutputStream os = response.getOutputStream()) {write(os, attrName, sheetName, data, clazz);} catch (IOException e) {e.printStackTrace();}}/*** 接收一个excel文件,并且进行解析* 注意一旦传入自定义监听器,则返回的list为空,数据需要在自定义监听器里面获取** @param multipartFile excel文件* @param clazz         数据类型的class对象* @param readListener  监听器* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile multipartFile, Class<T> clazz, ReadListener<T> readListener) {try (InputStream inputStream = multipartFile.getInputStream()) {return read(inputStream, clazz, readListener);} catch (IOException e) {e.printStackTrace();}return null;}private static <T> void write(OutputStream os, Set<String> attrName, String sheetName, List<T> data, Class<T> clazz) {ExcelWriterBuilder write = EasyExcel.write(os, clazz);// 如果没有指定要写出那些属性数据,则写出全部if (!CollectionUtils.isEmpty(attrName)) {write.includeColumnFiledNames(attrName);}write.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet(sheetName).doWrite(data);}private static <T> List<T> read(InputStream in, Class<T> clazz, ReadListener<T> readListener) {List<T> list = new ArrayList<>();Optional<ReadListener> optional = Optional.ofNullable(readListener);EasyExcel.read(in, clazz, optional.orElse(new AnalysisEventListener<T>() {@Overridepublic void invoke(T data, AnalysisContext context) {list.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println("解析完成");}})).sheet().doRead();return list;}}

一般导入导出还会有一个下载模板,原因是:如果不根据模板来书写数据,上传文件的花,肯定是有问题的,

所以使用这个方法一定要固定一个模板,模板可以选择放在oss上,也可以放在前端代码的静态文件下

使用poi实现excel导入导出相关推荐

  1. Java poi 实现excel导入导出工具类

    最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成 ...

  2. POI之excel导入导出

    下载地址http://poi.apache.org/ <dependency><groupId>org.apache.poi</groupId><artifa ...

  3. poi实现Excel导入导出依赖

    <!--文件上传组件--><dependency><groupId>commons-fileupload</groupId><artifactId ...

  4. SpringBoot集成文件 - 集成POI之Excel导入导出

  5. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  6. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...

  7. 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

    由于 poi 本身只是针对于 excel 等office软件的一个工具包,在一些常规的 excel 导入导出时,还需要再做一次精简的封装,简化代码耦合. 一.现状 本人经历过几家公司的代码封装,导入导 ...

  8. excel 导入导出使用poi自定义注解

    excel导入导出使用poi自定义注解 最近在做一个数据导入导出的模块 在网上找了一些例子 在这里整理一下 这里就不再贴原作者的地址  (以下代码来自网上非原创 稍作简单修改)  首先引入pom.xm ...

  9. Java POI Excel导入导出

    Java POI Excel导入导出 1.maven引入依赖 2.导入Excel 3.导出Excel 1.maven引入依赖 <!-- POI Excel 操作 --> <depen ...

最新文章

  1. 大粤桂谋定发展-丰收节交易会·林裕豪:从玉农业协作项目
  2. Bigo 实时计算平台建设实践
  3. JBoss AS 7类加载说明
  4. java去掉字符串中前后空格函数_Java去除字符串中的空格
  5. 开发 Windows 8 Bing地图应用(2)
  6. Oracle 给字符串补空格、补0
  7. 前台性能和服务器性能是什么,前端性能优化指南[2]--什么是Web性能?
  8. 百度贴吧 “只看某人” 小工具
  9. mysql报1665_mysql错误处理之ERROR 1665 (HY000)_MySQL
  10. java 编写浏览器_用Java自己写一个浏览器 —— JavaFX 入门
  11. iOS逆向 和班尼特福迪一起攻克难关(unity)
  12. 桌面的快捷方式图标异常
  13. 1308:【例1.5】高精除
  14. 乐客巴巴集团年会于2021年1月17日在广州举行
  15. 双十一买什么充电宝好?实惠好用的充电宝推荐
  16. Kali Linux 安装教程和使用技巧
  17. 计算机组成原理与体系结构 - 6分
  18. Android软键盘使用
  19. STM32F10xxx20xxx21xxxL1xxxx Cortex-M3程序设计手册 阅读笔记三(3):Cortex-M3指令描述
  20. hive 正则表达式-regexp

热门文章

  1. 论文写作笔记6 JBHI 论文汇总
  2. PCB原理图绘制(7)——PCB的设置与布线
  3. 一起来分解一个Netty应用
  4. Print Spooler 服务自动停止
  5. 深入分析泰坦尼克号分析生存率
  6. 我的世界(mc) 搭建 Forge 1.17.1 版 服务器教程,可装MOD,带面板
  7. ffmpeg-比特率,帧率和文件大小
  8. 聚合二维码生成(小程序二维码、付款码)
  9. 看保罗-艾伦的《我用微软改变世界》有感,谈中国原创发明创业的苦逼环境!操蛋的中国VC!
  10. 微信支付现金红包快速开通