springboot整合easyexcel 导入导出excel案例及文件无法打开
前端请求
vue3+axios+typescript
downloadByUrlStream({url:process.env.VUE_APP_API_URL1+"/MeshDevice/upExcel"})
export function downloadByUrlStream({url, target = '_self', fileName, fileType}: {url: string;target?: '_self' | '_blank';fileName?: string;fileType?: string;
}): Promise<boolean> {return new Promise<boolean>((resolve, reject) => {const link = document.createElement('a');link.href = url;link.target = target;if (link.download !== undefined) {link.download = fileName || getFileName(url)}if (document.createEvent) {const e = document.createEvent('MouseEvents');e.initEvent('click', true, true);link.dispatchEvent(e);return resolve(true);}if (url.indexOf('?') === -1) {url += '?download';}window.open(url, target);return resolve(true);})
}
Springboot 后端部分
先在pom文件中引用依赖
<!-- 引入easyexcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><!--使用POI读取文件--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>
注意:如果你引入的easyexcel 是3.x版本 请也将poi对应升至4.x版本
导出数据
controller or service 层
@GetMapping("/upExcel")public void downloadDeviceExcel(HttpServletResponse response,HttpServletRequest request) throws ParseException {try {List<MeshDeviceVos> list = meshDeviceMapper.deviceByAll();Set<String> includeColumnFieldNames = new HashSet<String>();includeColumnFieldNames.add("mac");includeColumnFieldNames.add("ver");includeColumnFieldNames.add("innermodel");includeColumnFieldNames.add("serialNumber");response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系String fileName = URLEncoder.encode("设备信息表", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");// 如果不用模板的方式导出的话,是doWriteEasyExcel.write(response.getOutputStream(), MeshDeviceData.class).includeColumnFieldNames(includeColumnFieldNames).sheet("设备信息表数据").doWrite(list);}catch (Exception e){e.printStackTrace();}}
// 根据用户传入字段 假设我们要忽略 字段
Set<String> excludeColumnFiledNames = new HashSet<String>();
// 根据用户传入字段 假设我们只要导出 字段
Set<String> includeColumnFiledNames = new HashSet<String>();
实体类
@Data
public class MeshDeviceData {@ExcelProperty(index = 0,value = "Mac")@ColumnWidth(20)private String mac;@ExcelProperty(index = 1,value = "版本")private String ver;@ExcelProperty(index = 2,value = "型号")private String innermodel;@ExcelProperty(index = 3,value = "序列号")@ColumnWidth(20)private String serialNumber;
}
导入数据
前端代码
<p><a-uploadv-model:file-list="fileList"name="file"accept=".xlsx,.xls":multiple="true":action="importUrl":headers="headers"@change="handleChange"><a-button><upload-outlined></upload-outlined>点击上传</a-button></a-upload></p>
handleChange 方法
const fileList = ref<FileItem[]>([])const importUrl =ref<string>(process.env.VUE_APP_API_URL1 + "/shop/importExcel"); const handleChange = (info: FileInfo) => {if (info.file.status !== 'uploading') {console.log(info.file, info.fileList)}fileList.value = [...info.fileList].splice(-1)if (info.file.status === 'done') {debuggerif (info.file.response.code === 0) {message.success('导入成功')ctx.emit('handle', false)} else {message.error('导入失败 ' + info.file.response.message)}} else if (info.file.status === 'error') {message.error(`${info.file.name} 上传失败`)}}
后端controller or service
@PostMapping("/importExcel")public RS insertCategoriesExcel(@RequestParam("file") MultipartFile file){if(StringUtils.isEmpty(file)){throw new MyException(1,"文件不能为空");}careCategoriesService.importCategories(file,careCategoriesService);return new RS().ok();}
@Overridepublic void importCategories(MultipartFile file, CareCategoriesService careCategoriesService) {try {InputStream inputStream = file.getInputStream();EasyExcel.read(inputStream, CategoriesVo.class,new CategoriesExcleListener(careCategoriesService)).sheet().doRead();}catch (Exception e){e.printStackTrace();//throw new MyException(1,"上传出错了");}}
新增一个listener 类 继承AnalysisEventListener<CategoriesVo> CategoriesVo 是实体类
public class CategoriesExcleListener extends AnalysisEventListener<CategoriesVo> {public CareCategoriesService careCategoriesService;public CategoriesExcleListener(CareCategoriesService careCategoriesService) {this.careCategoriesService = careCategoriesService;}@Overridepublic void invoke(CategoriesVo careCategoriesVo, AnalysisContext analysisContext) {if(careCategoriesVo ==null){throw new MyException(1,"添加失败");}CareCategories careCategories = new CareCategories();BeanUtils.copyProperties(careCategoriesVo,careCategories);//插入数据库String title = careCategories.getTitle();QueryWrapper<CareCategories> careCategoriesQueryWrapper = new QueryWrapper<>();careCategoriesQueryWrapper.eq("title",title);List<CareCategories> categoriesList = careCategoriesService.list(careCategoriesQueryWrapper);if(categoriesList.size()!=0){throw new MyException(1,"该类别已经存在库中,请勿重复导入");}careCategoriesService.save(careCategories);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}
遇到下载无法打开,后端报
java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Cell.getCellType()
需要将poi版本如
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency>
更改为
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
更多easyExcel 用法 可以前往官方API查看EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel
gitHub地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具
springboot整合easyexcel 导入导出excel案例及文件无法打开相关推荐
- Springboot 整合 easyexcel导入导出excel
1. 引入核心依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...
- springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel
springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...
- SpringBoot使用poi或EasyExcel导入导出Excel文件
使用poi导入导出Excel 首先引入poi依赖包 03版本的Excel和07版本的Excel所需要的依赖不同,都需要导入. 记录问题: 最初导入的poi包为3.6版本.WorkBook类和Sheet ...
- 使用阿里开源的EasyExcel导入导出EXCEL——工具类
工具类 package com.example.demo.util.excel;import com.alibaba.excel.EasyExcel; import com.alibaba.excel ...
- EasyExcel导入导出excel 复杂表头 表头校验 数据校验
目录 EasyExcel特点 一.导入excel案例 二.读取excel的相关技术点 1.读取excel的方式 2.读取sheet数量 3.指定从第几行开始读数据 三.导出excel 1.前端发起请求 ...
- EasyExcel 导入导出Excel文件
文章目录 写在前面 1.maven依赖 2.导入Excel文件 2.1.读取表格文件 2.2.如果有多个sheet表格 2.3.监听器封装(也可不封装) 2.4.读取数据格式化(实体类中添加注解) 3 ...
- Spring Boot使用EasyExcel导入导出Excel
一.导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a ...
- POI和EasyExcel导入导出Excel表格
这里写自定义目录标题 EasyExcel操作Excel表格 一.导入依赖: 二.编写实体类 三.编写测试类 POI操作Excel表格 基本功能: 一.导入依赖 二.测试类 2.1 使用HSSFWork ...
- 使用EasyExcel导入导出Excel报表-JAVA解析Excel工具
一.EasyExcel概述 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内 ...
最新文章
- char* 和jstring转换
- Linux性能评测工具之一:gprof篇
- excel mysql实时交换数据_Excel与数据库的数据交互
- vue+elementui中,el-select多选下拉列表中,如何同时获取:value和:label的值?
- C++ Websites
- 云在物联网中的惊人优势 | 技术头条
- 信息学奥赛一本通(1054:三角形判断)
- SSDTShadow Hook的实现,完整代码。可编译
- 浅析设计模式(三)——抽象工厂模式
- 人名和成绩一起排序_excel中怎么让人名和他的成绩一起排序
- 技术向Technical Artist(TA)如何学习——分享个人经历
- 详解EtherCAT主站SOEM源码_eepromtool.c
- 解读数字孪生概念 —— 智慧城市大脑
- LTE资源调度(6)-功率余量报告PHR
- 中职计算机基础辅导书,中职计算机基础 (938)(16页)-原创力文档
- GB/T28181国标视频直播平台LiveGBS支持录像回放吗云端录像录制在哪里
- CTF线下AWD攻防步骤总结
- IPV6----升级点,地址分类及部分协议配置
- 广东计算机非全日制 学校2020,2020年广东省非全日制研究生学校及专业有那些?...
- matplotlib 怎么画核密度
热门文章
- mysql新增字段顺序_mysql 添加字段、删除字段、调整字段顺序 转
- MySQL 新增字段(alter table add column),报错:Duplicate entry
- 沉睡者 - 现在的百度渠道还有网赚时机吗?
- iphone6以及iphone6plus适配
- 苹果手机怎么取消优酷自动续费_自动续费扣费不提醒、取消难?爱奇艺优酷等11家视频音频网站将全面整改...
- 彭友会出品,绝对精品!史上最强DMBOK学习资料出炉!
- struts-config配置详解
- Kaiming He论文阅读笔记二——Plain Vision Transformer Backbones for Object Detection
- 【JavaScript】日期格式化
- java用接口回调回合制游戏_类DOTA游戏如何设计多样化的技能系统?