[Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现
第一种:基于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("读取完毕");}}
第二步:编写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两种方式实现相关推荐
- JAVA实现创建Excel表并导出(转发)
JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...
- java applet怎么运行_Java如何运行Applet?运行Applet的两种方式
详细内容 applet是一个小型的动态Java程序,那么如何运行Applet?本篇文章就给大家介绍Applet,让大家了解Applet是什么,运行Applet的方法,希望对你们有所帮助. Java a ...
- springboot Java实现多文件的zip压缩操作 + 通过浏览器下载文件的两种方式
注只适配utf-8的场景,待完善! 压缩为zip文件 通过java程序输出文件 /*** 功能:压缩多个文件成一个zip文件* @param srcfile:源文件列表* @param zipfile ...
- java匿名启动线程_使用匿名内部类:来创建线程的两种方式
[Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...
- Linux中vim编辑文件显示行号(临时和永久两种方式)
一.前言 在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式. 本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...
- 在javaweb中实现excel的导入导出到数据库(mysql)
在做web开发时,我们经常会用到数据表格的导入导出功能,这样可以帮我们节省人工操作的时间,极大提高办事效率. 笔者所做的导入导出是针对Java springMVC框架.工作簿poi以及前端jquery ...
- java 像素矩阵_Java图片读取之BufferedImage得到像素矩阵的两种方式
最近在尝试着采用Java在图像处理领域实践一下常用的机器学习算法.首先涉及到的是如何将一副图片读取到一个像素矩阵中(Java中就是一维或二维数组中).在实践过程中,通过测试代码,我发现基于Buffer ...
- hybris导出系统已有数据的两种方式
参考SAP帮助文档: https://help.sap.com/viewer/d0224eca81e249cb821f2cdf45a82ace/1905/en-US/a8beb8ac6b684228a ...
- Unity中传入任意数,转换成分,秒,并进行倒计时换算..(两种方式)
第一种方式是利用Unity中的协程,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngin ...
最新文章
- python如何处理异常_python如何进行异常处理
- RocketMq是什么
- git远程版本硬删除
- Animation.wrapMode循环模式
- 报表查询——自动刷新数据,双击明细打开关联作业
- python3 struct.pack方法报错argument for 's' must be a bytes object
- Kendo UI开发教程(9): Kendo UI Validator 概述
- Nginx(二) 反向代理负载均衡
- VB 窗体实现文件拖拽获取路径方法
- 怎样让手机打电话显示不在服务器,要怎样设置才让对方打电话进来是空号?
- 服务器lsass状态代码c0000005,Windows服务器上lsass.exe进程CPU使用率异常问题排查方法...
- 如何改变计算机内存配置文件,电脑内存使用率过高怎么解决?教你如何调整内存大小...
- 2020年营收仅62.5万,九城凭什么砸1亿美金购买矿机?
- 计算机共享文件误删怎么恢复,在电脑上不小心把共享里的EXCEL表格数据给删除了,该怎么恢复这个文件的数据啊?,excel表格里误删数据恢复...
- 计算机dns怎么设置方法,电脑的dns怎么设置具体方法
- mapbox制作动态地图——storytelling(附html代码)
- 点击highcharts下钻柱状图更改其他柱子图
- 输出指定要求的回文日期与字符串拼接
- Centos8搭建并应用NIS服务
- JAVA梅森旋转随机算法_梅森旋转算法
热门文章
- linux系统USB端口序号绑定,相同或不同设备厂家都可
- ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图散点(气泡)组件【2】 - 福建省
- 阿里云财务软件好会计-好会计财务管理系统介绍...
- MATLAB中如何输入希腊字母
- 螯合放射性核素127985-74-4,p-SCN-Bn-DOTA连接单克隆抗体的一种双功能螯合剂
- 【新人】C++小白刷题系列0009进制回文数
- python如何爬取豆瓣_python 爬虫之 爬取豆瓣网话题
- 《我们一无所有》读后感2
- 5_小米监控Open-Falcon 安装-Agent
- 苹果app(iOS app)的URL schemes