前端请求

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案例及文件无法打开相关推荐

  1. Springboot 整合 easyexcel导入导出excel

    1. 引入核心依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel< ...

  2. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  3. SpringBoot使用poi或EasyExcel导入导出Excel文件

    使用poi导入导出Excel 首先引入poi依赖包 03版本的Excel和07版本的Excel所需要的依赖不同,都需要导入. 记录问题: 最初导入的poi包为3.6版本.WorkBook类和Sheet ...

  4. 使用阿里开源的EasyExcel导入导出EXCEL——工具类

    工具类 package com.example.demo.util.excel;import com.alibaba.excel.EasyExcel; import com.alibaba.excel ...

  5. EasyExcel导入导出excel 复杂表头 表头校验 数据校验

    目录 EasyExcel特点 一.导入excel案例 二.读取excel的相关技术点 1.读取excel的方式 2.读取sheet数量 3.指定从第几行开始读数据 三.导出excel 1.前端发起请求 ...

  6. EasyExcel 导入导出Excel文件

    文章目录 写在前面 1.maven依赖 2.导入Excel文件 2.1.读取表格文件 2.2.如果有多个sheet表格 2.3.监听器封装(也可不封装) 2.4.读取数据格式化(实体类中添加注解) 3 ...

  7. Spring Boot使用EasyExcel导入导出Excel

    一.导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a ...

  8. POI和EasyExcel导入导出Excel表格

    这里写自定义目录标题 EasyExcel操作Excel表格 一.导入依赖: 二.编写实体类 三.编写测试类 POI操作Excel表格 基本功能: 一.导入依赖 二.测试类 2.1 使用HSSFWork ...

  9. 使用EasyExcel导入导出Excel报表-JAVA解析Excel工具

    一.EasyExcel概述 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内 ...

最新文章

  1. char* 和jstring转换
  2. Linux性能评测工具之一:gprof篇
  3. excel mysql实时交换数据_Excel与数据库的数据交互
  4. vue+elementui中,el-select多选下拉列表中,如何同时获取:value和:label的值?
  5. C++ Websites
  6. 云在物联网中的惊人优势 | 技术头条
  7. 信息学奥赛一本通(1054:三角形判断)
  8. SSDTShadow Hook的实现,完整代码。可编译
  9. 浅析设计模式(三)——抽象工厂模式
  10. 人名和成绩一起排序_excel中怎么让人名和他的成绩一起排序
  11. 技术向Technical Artist(TA)如何学习——分享个人经历
  12. 详解EtherCAT主站SOEM源码_eepromtool.c
  13. 解读数字孪生概念 —— 智慧城市大脑
  14. LTE资源调度(6)-功率余量报告PHR
  15. 中职计算机基础辅导书,中职计算机基础 (938)(16页)-原创力文档
  16. GB/T28181国标视频直播平台LiveGBS支持录像回放吗云端录像录制在哪里
  17. CTF线下AWD攻防步骤总结
  18. IPV6----升级点,地址分类及部分协议配置
  19. 广东计算机非全日制 学校2020,2020年广东省非全日制研究生学校及专业有那些?...
  20. matplotlib 怎么画核密度

热门文章

  1. mysql新增字段顺序_mysql 添加字段、删除字段、调整字段顺序 转
  2. MySQL 新增字段(alter table add column),报错:Duplicate entry
  3. 沉睡者 - 现在的百度渠道还有网赚时机吗?
  4. iphone6以及iphone6plus适配
  5. 苹果手机怎么取消优酷自动续费_自动续费扣费不提醒、取消难?爱奇艺优酷等11家视频音频网站将全面整改...
  6. 彭友会出品,绝对精品!史上最强DMBOK学习资料出炉!
  7. struts-config配置详解
  8. Kaiming He论文阅读笔记二——Plain Vision Transformer Backbones for Object Detection
  9. 【JavaScript】日期格式化
  10. java用接口回调回合制游戏_类DOTA游戏如何设计多样化的技能系统?