第一种:基于easy-poi实现Excel导入导出

1、导出Excel表格

  • 第一步:在pom文件中导入依赖

<!--基于easy-poi实现Excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>6.1.3.Final</version></dependency>
  • 第二步:在数据库表对应的实体类中给每个属性添加注解@Excel

// 这里@Excel注解中的name属性制定了之后导出Excel表的第一行表头@Excel(name = "员工编号")private Integer id;@Excel(name = "员工姓名")private String name;  @Excel(name = "性别")private String gender;@Excel(name = "出生日期")private Date birthday;@Excel(name = "身份证号")private String idCard;@Excel(name = "婚姻状况")private String wedlock;@Excel(name = "民族")private Integer nationId;@Excel(name = "籍贯")private String nativePlace;@Excel(name = "政治面貌")private Integer politicId;@Excel(name = "邮箱")private String email;
  • 第三步:编写service层代码,service实现类实现接口

//文件下载@Overridepublic Workbook download() {QueryWrapper<Employee> wrapper = new QueryWrapper<>();// 查询出后台实体类集合List<Employee> employeeList = employeeMapper.selectList(wrapper);ExportParams exportParams = new ExportParams();exportParams.setType(ExcelType.XSSF); //对应的xlsxWorkbook workbook = ExcelExportUtil.exportExcel(exportParams, Employee.class, employeeList);return workbook;}
  • 第四步:编写controller层代码

//导出下载表格,注意返回值必须是void@RequestMapping("/download")public void download(HttpServletResponse response) {Workbook workbook = employeeService.download();//命名表格String fileName = "emp.xlsx";try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));//输出流workbook.write(response.getOutputStream());// 清除responseresponse.flushBuffer();} catch (Exception e) {log.error(e.getMessage());}}
  • 第五步:访问controller方法的路径进行文件下载

如果在项目中实现Excel表导出,只需写一个按钮,点击之后跳转controller方法路径,实现导出表格

2、导入Excel表格

  • 第一步:编写service层代码,service实现类实现接口

//上传表格@Overridepublic List<Employee> uploadFile(MultipartFile multipartFile) {// 新建导入对象ImportParams importParams = new ImportParams();List<Employee> employeeList = null;try {employeeList = ExcelImportUtil.importExcel(multipartFile.getInputStream(),Employee.class,importParams);} catch (Exception e) {e.printStackTrace();}// 添加实体类集合中的实体类数据到数据库表中if (employeeList != null) {for (Employee emp : employeeList) {employeeMapper.insert(emp);log.info(emp + "");}}return employeeList;}
  • 第二步:编写controller层代码

//实现上传,返回值 R 是我自定义的一个工具类,只是将数据返回到页面@PostMapping("/upload")public R uploadFile(@RequestParam("file")MultipartFile multipartFile, Model model) {List<Employee> employeeList = employeeService.uploadFile(multipartFile);return R.ok().data("employeeList",employeeList);}
  • 第三步:在前端页面中写一个表单进行文件导入

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上传">
</form></body>
</html>

至此就完成Excel表格的导出与导入啦。

第二种:使用EasyExcel导入导出功能

1、导出Excel表格

  • 第一步:添加依赖

<!--使用EasyExcel导入导出功能--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.3</version></dependency>
  • 第二步:在实体类中属性上添加注解@ExcelProperty(value = "编号",index = 0)

      @ExcelProperty(value = "编号",index = 0)private Integer id;@ExcelProperty(value = "姓名",index = 1)private String name;@ExcelProperty(value = "手机号码",index = 2)private String phone;@ExcelProperty(value = "住宅电话",index = 3)private String telephone;@ExcelProperty(value = "联系地址",index = 4)private String address;@ExcelProperty(value = "是否启用",index = 5)private Boolean enabled;@ExcelProperty(value = "用户名",index = 6)private String username;@ExcelProperty(value = "密码",index = 7)private String password;@ExcelProperty(value = "用户头像",index = 8)private String userFace;@ExcelProperty(value = "备注",index = 9)private String remark;@ExcelProperty(value = "盐值",index = 10)private String slot;
  • 第三步:编写controller层代码

//导出文件@GetMapping("/write")public R writeExcel(HttpServletResponse response) {response.setCharacterEncoding("UTF-8");//content-disposition 指示如何处理响应内容,一般有两种方式:// inline :直接在页面显示,   attchment :以附件形式下载response.setHeader("Content-disposition","attachment;filename=demo.xlsx");//获取所有数据List<Admin> list = adminService.list();try {EasyExcel.write(response.getOutputStream(),Admin.class).sheet("账号基本信息").doWrite(list);} catch (IOException e) {e.printStackTrace();}return R.ok().message("数据导出成功");}
  • 第四步:访问controller方法的路径进行文件下载

如果在项目中实现Excel表导出,只需写一个按钮,点击之后跳转controller方法路径,实现导出表格

2、导入Excel表格

  • 第一步:导入功能需要自己去重写一个监听器类

package com.zjy.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.CellData;
import com.zjy.entity.Admin;
import com.zjy.service.AdminService;import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** @Author ZJY* @Date: 2022/11/17 22:25*/
public class ExcelListener extends AnalysisEventListener<Admin> {// 用于存储导入进来的数据private List<Admin> adminList = new ArrayList<>();/*** 间隔多少条数据进行保存* @param headMap* @param context*/private static final int BATCH_COUNT=5;/*** @param headMap* @param context*/private AdminService adminService;public ExcelListener(AdminService adminService){this.adminService=adminService;}@Overridepublic void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {System.out.println("读取表头位置:"+headMap);super.invokeHead(headMap, context);}// 一行一行读取数据,每一次都需要调用该方法@Overridepublic void invoke(Admin admin, AnalysisContext analysisContext) {System.out.println("*******555555555**"+ admin+"====>");adminList.add(admin);
// 数字大小int size = adminList.size();if(size>=BATCH_COUNT){
//存储数据到数据库adminService.saveBatch(adminList);adminList.clear();}}// 读取完毕操作@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {adminService.saveBatch(adminList);System.out.println("读取完毕");}}
这里面注意一个问题,如果获取到的数据全部是null的情况下, 请注意检查下自己的实体类中:是否有这个注解:@Accessors(chain = true) ,有的话删除掉即可。
  • 第二步:编写controller层代码

//上传文件@PostMapping("/read")public R readExcel(@RequestParam("file") MultipartFile file) throws IOException {// EasyExcel.read(multipartFile.getInputStream(),User.class)//String filePath="D:\\bdqn_log\\filepath\\aa.xlsx";// EasyExcel.read(filePath,User.class,newExcelListener(adminService)).sheet().doRead();EasyExcel.read(file.getInputStream(),Admin.class,newExcelListener(adminService)).sheet().doRead();return R.ok().message("数据导入成功!");}
  • 第三步:在前端页面中写代码进行文件导入,我使用的是vue

<el-upload
action="/user/read"
:show-file-list="false"
:on-success="fileSucc"
style="display: inline-block"
>
<el-button type="primary" style="margin-left: 5px;">导入<i class="el-iconbottom"></i></el-button>
</el-upload>

至此第二种方式实现Excel表导入导出就完成啦。

[Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现相关推荐

  1. JAVA实现创建Excel表并导出(转发)

    JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...

  2. java applet怎么运行_Java如何运行Applet?运行Applet的两种方式

    详细内容 applet是一个小型的动态Java程序,那么如何运行Applet?本篇文章就给大家介绍Applet,让大家了解Applet是什么,运行Applet的方法,希望对你们有所帮助. Java a ...

  3. springboot Java实现多文件的zip压缩操作 + 通过浏览器下载文件的两种方式

    注只适配utf-8的场景,待完善! 压缩为zip文件 通过java程序输出文件 /*** 功能:压缩多个文件成一个zip文件* @param srcfile:源文件列表* @param zipfile ...

  4. java匿名启动线程_使用匿名内部类:来创建线程的两种方式

    [Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...

  5. Linux中vim编辑文件显示行号(临时和永久两种方式)

    一.前言   在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式.     本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...

  6. 在javaweb中实现excel的导入导出到数据库(mysql)

    在做web开发时,我们经常会用到数据表格的导入导出功能,这样可以帮我们节省人工操作的时间,极大提高办事效率. 笔者所做的导入导出是针对Java springMVC框架.工作簿poi以及前端jquery ...

  7. java 像素矩阵_Java图片读取之BufferedImage得到像素矩阵的两种方式

    最近在尝试着采用Java在图像处理领域实践一下常用的机器学习算法.首先涉及到的是如何将一副图片读取到一个像素矩阵中(Java中就是一维或二维数组中).在实践过程中,通过测试代码,我发现基于Buffer ...

  8. hybris导出系统已有数据的两种方式

    参考SAP帮助文档: https://help.sap.com/viewer/d0224eca81e249cb821f2cdf45a82ace/1905/en-US/a8beb8ac6b684228a ...

  9. Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)

    第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngin ...

最新文章

  1. python如何处理异常_python如何进行异常处理
  2. RocketMq是什么
  3. git远程版本硬删除
  4. Animation.wrapMode循环模式
  5. 报表查询——自动刷新数据,双击明细打开关联作业
  6. python3 struct.pack方法报错argument for 's' must be a bytes object
  7. Kendo UI开发教程(9): Kendo UI Validator 概述
  8. Nginx(二) 反向代理负载均衡
  9. VB 窗体实现文件拖拽获取路径方法
  10. 怎样让手机打电话显示不在服务器,要怎样设置才让对方打电话进来是空号?
  11. 服务器lsass状态代码c0000005,Windows服务器上lsass.exe进程CPU使用率异常问题排查方法...
  12. 如何改变计算机内存配置文件,电脑内存使用率过高怎么解决?教你如何调整内存大小...
  13. 2020年营收仅62.5万,九城凭什么砸1亿美金购买矿机?
  14. 计算机共享文件误删怎么恢复,在电脑上不小心把共享里的EXCEL表格数据给删除了,该怎么恢复这个文件的数据啊?,excel表格里误删数据恢复...
  15. 计算机dns怎么设置方法,电脑的dns怎么设置具体方法
  16. mapbox制作动态地图——storytelling(附html代码)
  17. 点击highcharts下钻柱状图更改其他柱子图
  18. 输出指定要求的回文日期与字符串拼接
  19. Centos8搭建并应用NIS服务
  20. JAVA梅森旋转随机算法_梅森旋转算法

热门文章

  1. linux系统USB端口序号绑定,相同或不同设备厂家都可
  2. ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图散点(气泡)组件【2】 - 福建省
  3. 阿里云财务软件好会计-好会计财务管理系统介绍...
  4. MATLAB中如何输入希腊字母
  5. 螯合放射性核素127985-74-4,p-SCN-Bn-DOTA连接单克隆抗体的一种双功能螯合剂
  6. 【新人】C++小白刷题系列0009进制回文数
  7. python如何爬取豆瓣_python 爬虫之 爬取豆瓣网话题
  8. 《我们一无所有》读后感2
  9. 5_小米监控Open-Falcon 安装-Agent
  10. 苹果app(iOS app)的URL schemes