导出示例:

后台:

1、引入依赖:需要引入easyExcel的依赖,但是我在使用过程中发现也是需要poi的依赖,不然会报错,就同时引入了。

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

2、实体类定义导出字段及Title:@ExcelProperty

@Setter
@Getter
public class TradingRecord {@ExcelProperty({"沃联之家VGM对账清单", "账单创建时间","ID"})private String uuid;@ExcelProperty({"沃联之家VGM对账清单", "账单创建时间","关联业务编号"})private String referenceNo;@ExcelProperty({"沃联之家VGM对账清单", "账单创建时间","金额"})private Double changeTicket;@ExcelProperty({"沃联之家VGM对账清单", "账单创建时间","交易时间"})private Date recordDate;@ExcelProperty({"沃联之家VGM对账清单", "账单总金额","交易说明"})private String remark;}

3、直接调用

public void writeTradingRecord(HttpServletResponse   response,AppreciationServiceRequest appreciationServiceRequest) throws IOException {List<TradingRecord> list = new ArrayList<TradingRecord>();String name = "VGM对账清单.xlsx";// 导出时候会出现中文无法识别问题,需要转码String fileName = new String(name.getBytes("gb2312"),"ISO8859-1");response.setContentType("application/vnd.ms-excel;chartset=utf-8");response.setHeader("Content-Disposition","attachment;filename=" + fileName);//调用工具类ExcelWriter writer = EasyExcel.write(response.getOutputStream()).build();WriteSheet sheet = EasyExcel.writerSheet(0,"sheet").head(TradingRecord.class).build();writer.write(list,sheet);writer.finish(); // 使用完毕之后要关闭}

也支持动态复杂表头:

public void writeTradingRecord(HttpServletResponse   response,AppreciationServiceRequest appreciationServiceRequest) throws IOException {List<TradingRecord> list = new ArrayList<TradingRecord>();String name = "VGM对账清单.xlsx";// 导出时候会出现中文无法识别问题,需要转码String fileName = new String(name.getBytes("gb2312"),"ISO8859-1");response.setContentType("application/vnd.ms-excel;chartset=utf-8");response.setHeader("Content-Disposition","attachment;filename=" + fileName);//调用工具类// 自定义动态TitleList<List<String>> headTitles = Lists.newArrayList();// 第一行表头String basicInfo = "沃联之家VGM对账清单";// 第二行表头SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");String createDate = "账单创建时间: " + sdf.format(new Date());String amount1 = "账单总金额: ¥" + df2.format(amount);// 第三行表头headTitles.add( Lists.newArrayList(basicInfo , createDate,"ID"));headTitles.add( Lists.newArrayList(basicInfo , createDate,"关联业务编号"));headTitles.add( Lists.newArrayList(basicInfo , createDate,"金额"));headTitles.add( Lists.newArrayList(basicInfo , createDate,"交易时间"));headTitles.add( Lists.newArrayList(basicInfo , amount1,"交易说明"));ExcelWriter writer = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new CustomCellWriteHandler()).build();WriteSheet sheet = EasyExcel.writerSheet(0,"sheet").head(headTitles).build();writer.write(list,sheet);writer.finish();}

若想使导出的表格宽度自适应:添加宽度自适应工具类,并在使用时.registerWriteHandler。如:EasyExcel.write(response.getOutputStream()).registerWriteHandler(new CustomCellWriteHandler()).build();

package com.walltech.oms.util;import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** Excel 导出列宽度自适应* @author phli*/
public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy {private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();@Overrideprotected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) {boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);if (needSetWidth) {Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());if (maxColumnWidthMap == null) {maxColumnWidthMap = new HashMap<>();CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);}Integer columnWidth = this.dataLength(cellDataList, cell, isHead);if (columnWidth >= 0) {if (columnWidth > 255) {columnWidth = 255;}Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());if (maxColumnWidth == null || columnWidth > maxColumnWidth) {maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);}}}}private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {if (isHead) {return cell.getStringCellValue().getBytes().length;} else {CellData cellData = cellDataList.get(0);CellDataTypeEnum type = cellData.getType();if (type == null) {return -1;} else {switch (type) {case STRING:return cellData.getStringValue().getBytes().length;case BOOLEAN:return cellData.getBooleanValue().toString().getBytes().length;case NUMBER:return cellData.getNumberValue().toString().getBytes().length;default:return -1;}}}}
}

4、VUE端:在使用过程中,发现不能直接使用axios直接调用,会报错,需要使用window.localtion调用。

5、导出示例:

----导出end-----

导入示例:

1、VUE:使用element的el-upload

            <el-uploadclass="upload-demo"name="file":action="url":with-credentials="true" :on-change="handleChange":file-list="fileList":limit="1":on-exceed="handleExceed":on-preview="handlePreview"accept=".xlsx":auto-upload="false"><el-button size="mini" style="border-radius:25px;"><i class="el-icon-upload2"/>点击上传</el-button><div slot="tip" class="el-upload__tip">一次只能上传一个文件,文件大小不可超过20M</div></el-upload>

2、传参调用后台:

    importExcel () {let self = thisif (self.fileList.length <= 0) {self.$message("请选择要导入的文件!")}let formData = new FormData();let file = this.fileList[0]formData.append('file', file.raw)self.importLoding = trueaxios.post('/appreciation/import', formData).then(res => {self.$message('导入成功')self.importDialog = falseself.fetchVgmList(1)self.fileList = []self.importLoding = false}).catch (err=> {self.importLoding = false})}

3、后台处理:

EasyExcel.read(file.getInputStream(), TradingRecord.class,new ImportTradingListener(appreciationService)).sheet().doRead();

4、添加监听,处理excel表格内容:

package com.walltech.oms.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.walltech.oms.pojo.excelModel.TradingRecord;
import com.walltech.oms.service.AppreciationService;import java.util.ArrayList;
import java.util.List;/*** 监听:交易记录导入获取UUID* @author phli*/
public class ImportTradingListener extends AnalysisEventListener<TradingRecord> {/*** 每隔1000条存储数据库,然后清理list,方便内存回收*/private static final Integer BATCH_COUNT = 1000;List<String> list = new ArrayList<>();private AppreciationService appreciationService;public ImportTradingListener(AppreciationService appreciationService){this.appreciationService = appreciationService;}@Overridepublic void invoke(TradingRecord tradingRecord, AnalysisContext analysisContext) {list.add(tradingRecord.getUuid());if (list.size() >= BATCH_COUNT) {list.clear(); //保证doAfterAllAnalysed方法执行数据为不重复数据}}//这里是数据全部读完之后走  为保证数据不够批量最小值也能存进数据库@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {// 这个方法便是拿到excel的数据之后,进行修改数据库的操作。appreciationService.updateWriteOffState(list);}
}

------导入END------

使用VUE+SpringBoot+EasyExcel 整合导入导出demo相关推荐

  1. 使用EasyExcel实现导入导出功能

    使用EasyExcel实现导入导出功能 一.导出 1.使用ideal新建一个maven项目,并在pom.xml文件中引入EasyExcel依赖 <!--easyexcel实现导入导出--> ...

  2. java使用EasyExcel实现导入导出几种方式(导入、模板导出、和不需要模板的导出)

    java通过EasyExcel实现导入导出(导入.模板导出.和不需要模板的导出) 此文章只是涉及到简单的导入导出 通过实体模板导入数据 无实体模板导入数据 导出数据 通过模板导出数据 使用到的mave ...

  3. EasyExcel(二) 导入导出excel的数据格式转换

    EasyExcel(二) 导入导出excel的数据格式转换 关于easyExcel的基本用法我就不在多说了,有需要的可以自己点击该链接去学习基本的使用,主要对这里面经常用到的一些监听器和拦截器讲一下, ...

  4. EasyExcel 模板导入导出

    一.环境 1.开发工具:idea2018.1 2.jar 管理:maven 3.3.3 3.项目类型:springboot 二.pom.xml <?xml version="1.0&q ...

  5. 自从用了 EasyExcel,导入导出 Excel 更简单了!

    EasyExcel 在做excel导入导出的时候,发现项目中封装的工具类及其难用,于是去gitHub上找了一些相关的框架,最终选定了EasyExcel.之前早有听闻该框架,但是一直没有去了解,这次借此 ...

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

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

  7. vue单文件组件导入导出

    目录分析 打开项目,依次分析下目录结构,项目目录结构如下 项目目录结构如下 单文件组件.vue 目完成后,我们看到src 目录下有一个componets 目录,里面有一个 HelloWorld.vue ...

  8. antd of vue的excel表格导入导出

    需求:后台管理系统的某个表格需要导入导出 本文基于vue和antdesign 表格导入: 首先需要先下载导入模版,如果导入的表格和项目中的表格不对应的话,将此传给后端之后,后端识别不出来. 下载导入模 ...

  9. 二、使用阿里的easyExcel进行导入导出

    0.pom文件中使用的依赖 我用的是如下的版本,低版本的需要重写6个方法,新版的需要重写两个,新版本中其余4个转成了静态方法,不需要重写了. <dependency><groupId ...

最新文章

  1. 应届前端面试——看这篇就够了(一)
  2. python常用标准库有哪些-Python开发中常用的标准库
  3. 移动端开发高清效果和多屏适配
  4. 《幽灵行者》:近期最酷炫的赛博朋克游戏之一
  5. python 面向对象 私有化浅析
  6. 湘潭大学oracle考试,湘潭大学07级《oracle数据库》A卷及其部分参考答案
  7. phpstorm 2019.1 mac
  8. layui 前端分页 后端分页
  9. Linux设置小红点键盘,debian linux上安装thinkpad小红点驱动/Installing Debian On Thinkpad – Trackpoint...
  10. C++中setw()函数
  11. css 彩虹色渐变色,纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)...
  12. VS code,Live Server更改默认浏览器
  13. 幸运彩票 分数 15作者 陈越单位 浙江大学
  14. NOI / 1.5编程基础之循环控制——01:求平均年龄
  15. Tensorflow2.0
  16. SSL 域名证书 安装指引
  17. 十分钟了解K-means聚类
  18. Dcloud云函数服务空间
  19. 2022 腾讯社招Golang后端面试经验分享
  20. 同步以太网-SyncE介绍

热门文章

  1. python罗马数字转换_Python练习【3】【罗马数字转换/查找公共前缀】
  2. C语言:int x,int* x,int *x,int**的区别
  3. 《中国人工智能学会通讯》——11.40 面向知识库的实体链接
  4. ai切换rgb模式_当AI频繁切换色彩预览模式时 颜色会越变越深 求解?
  5. ossec安装中遇到的问题
  6. 今日所学(二) [当日学习内容检查,如果有误,望大家赐教]
  7. Android 锁屏软件MemoryDebris测试报告
  8. 搭建本地GitLab仓库排坑指南
  9. 写一份文化干部培训方案
  10. c语言游戏经典案例,C语言新案例-跑马游戏