使用easyExcel在导入数据事有很好的使用性,方便操作。

添加依赖:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>

前端解析的文件流调用这个方法;

需要首先创建监听方法类

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import lombok.extern.slf4j.Slf4j; /**
* 读取数据监听器.
* 监听excel解析到的数据
* @author: xiehj
* Date: 2023-06-07
*/
@Slf4j
public class CommonExcelListener<T> extends AnalysisEventListener<T> { /**存放解析到的数据,给了一个初始容量,为了避免list的频繁扩容带来的性能问题.*/
private final List<T> list = new ArrayList<>(1000); /**解析每一行都会执行该方法.*/
@Override
public void invoke(final T data, final AnalysisContext analysisContext) {
this.list.add(data);
} /**解析完成.*/
@Override
public void doAfterAllAnalysed(final AnalysisContext analysisContext) {
} /**解析表头.*/
@Override
public void invokeHeadMap(final Map<Integer, String> headMap, final AnalysisContext context) {
headMap.entrySet().removeIf(h -> Objects.isNull(h.getValue()) || "".equals(h.getValue()));
}
public List<T> getList() {
return this.list;
} }

创建utils,创建这个方法即可

public String importFile(final InputStream inputStream) {
// 如果集合为空,则不用处理。
if (Objects.isNull(inputStream)) {
throw new ExtBusinessException("导入文件时,文件流异常。");
} final CommonExcelListener<ArticleImportVo> listener = new CommonExcelListener<>();
EasyExcel.read(inputStream, ArticleImportVo.class, listener)
.headRowNumber(1)
.autoTrim(true)
.sheet(0)
.doRead();
// list即为文件流解析出的数据实体类。
final List<ArticleImportVo> list = listener.getList();
}

通过“easyExcel”导出文件代码:

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.alibaba.excel.EasyExcel;
import com.mocha.framework.commons.log.annotation.AuditLog;
import com.mocha.framework.commons.log.annotation.Language;
import com.mocha.sn.business.itbussiness.service.IExportCaseService;
import com.mocha.sn.business.itbussiness.vo.ArticleImportVo; import lombok.extern.slf4j.Slf4j; /**
* 导出数据控制器.
* Author:xiehj
* Date:2023-06-12
*/
@RestController
@RequestMapping("/v1/api/it/pc/business/export")
@Slf4j
public class ExportCaseController { private static final String EXCEL_TYPE = ".xlsx"; @Resource
private IExportCaseService exportCaseService; /**
* 导出文件。
* @param response 前端响应。
*/
@GetMapping("/file")
@AuditLog(operation = @Language(cn = "下载附件"))
public void downloadFile(final HttpServletResponse response) {
final List<ArticleImportVo> articleVos = exportCaseService.exportFile();
final String excelName = "导出数据";
final String fileName = new String(excelName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.addHeader("content-Disposition", "attachment;filename=" + fileName + EXCEL_TYPE);
try {
EasyExcel.write(response.getOutputStream(), ArticleImportVo.class)
.autoCloseStream(Boolean.TRUE).sheet(excelName).doWrite(articleVos);
} catch (final IOException e) {
log.error("导出文件失败。", e);
}
}
}

在此记录,方便下次使用时调用。

“easyExcel”导入的代码实现的更多相关文章

  1. EasyExcel导入导出

    maven依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> & ...

  2. Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构

    本文提供了一个在Windows环境下使用Visual Studio 2013编辑现有源代码并且保持目录结构的方法.本文使用VS2013中文社区版做示例(本版本为免费版,可在VS官网下载),其他版本的V ...

  3. svn import 向Google code里导入初始代码

    其实很简单的问题,花费了这么多时间,想把初始代码导入到Google code里,用VisaulSVN插件的Switch功能也不可以,Google code上虽然有上传,但是只能单个文件传...... ...

  4. ASP.NET Aries 高级开发教程:Excel导入之代码编写(番外篇)

    前言: 以许框架提供的导入配置功能,已经能解决95%以上的导入情况,但有些情况总归还是得代码来解决. 本篇介绍与导入相关的代码. 1.前端追加导入时Post的参数: var grid = new AR ...

  5. EasyExcel导入工具(SpringMVC下使用)

    easyExcel:由阿里巴巴公司开发,由github托管 github上有详细使用文档 github地址:https://github.com/alibaba/easyexcel/blob/mast ...

  6. MongoDB数据导入hbase + 代码

    需求: 从mongoDB里面查出来数据,判断是否有该列簇,如果有则导入此条数据+列簇,如果没有,则该条数据不包含该列簇 直接贴出代码: package Test; import java.util.A ...

  7. 阿里 EasyExcel 7 行代码优雅地实现 Excel 文件生成&下载功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  8. EasyExcel导入

    记录摸鱼的一天 技术栈:spring boot2.x+mybatis plus+easyExcel 2.2.6 生成简单的实体类等等等等 导入easyExcel的依赖 实体类 编写服务层 import ...

  9. java使用户EasyExcel导入导出excel

    使用alibab的EasyExce完成导入导出excel 一.准备工作 1.导包 <!-- poi 相关--> <dependency> <groupId>org. ...

  10. pl/sql的工具导入和代码导入

    工具导入:在导入的文件中添加导入工具.导入imp:F:\app\Administrator\product\11.1.0\db_1\BIN\imp.exe导出exp:F:\app\Administra ...

随机推荐

  1. Python property、setter、deleter

    面向对象封装特点之一就是通过实现好的方法来访问,限制对数据的不合理访问,把对象状态私有化,仅供类的内部进行操作 下方示例,Test方法的number属性类实例的时候传递1,number是一个公开属性, ...

  2. 最新升级优化 shopee|美客多 Mercadolibre|shopfiy|lazada|独立货代贴单系统 可规模化的贴单打单系统 源码下载独立部署

    七想网络 跨境猴 最新优化改进版本的 虾皮代打包-虾皮代贴单 独立部署源码版本货代贴单系统 介绍: 台湾海外仓_shopee货代_虾皮物流–虾皮代贴单 虾皮代打包-虾皮代贴单-虾皮货代平台 shope ...

  3. .Net 6.0 部署Linux+Nginx +PM2教程

    今天带大家将本地.Net6.0项目部署到Linux系统中,其中有用到Nginx反向代理和PM2进程管理工具,希望本偏文章能对你有所帮助,成为你成功路上的垫脚石! 背景: 在.Net 5.0横空出世之后 ...

  4. jdk1.8 LocalTime、LocalDate、LocalDateTime 使用大全

    目录 LocalTime.LocalDate.LocalDateTime 区别 LocalTime.LocalDate.LocalDateTime 使用 now 获取当前 时刻.日期.时间 of 获取 ...

  5. Caused by: java.net.BindException: Address already in use: JVM_Bind(ActiveMq已经启动)

    1.本地启动项目开启两个启动类出错. Error creating bean with name 'brokerService' defined in class path resource [com ...

  6. day08-优惠券秒杀04

    功能03-优惠券秒杀04 4.功能03-优惠券秒杀 4.7Redis优化秒杀 4.7.1优化分析 现在来回顾一下优惠券秒杀业务的两个主要问题: (1)首先是对优惠券的扣减,需要防止库存超卖现象: (2 ...

  7. NC23054 华华开始学信息学

    题目链接 题目 题目描述 因为上次在月月面前丢人了,所以华华决定开始学信息学.十分钟后,他就开始学树状数组了.这是一道树状数组的入门题: 给定一个长度为 \(N\) 的序列 \(A\) ,所有元素初值 ...

  8. 自定义alert、confirm、prompt的vue组件

    Prompt.vue组件 说明: 通过props定制定制的Prompt,可选值 mode 默认值:prompt, 其他模式:confirm.message(简单的提示,可设置提示显示时间,类似aler ...

  9. Node.js躬行记(28)——Cypress自动化测试实践

    最近在研究如何提升项目质量,提炼了许多个用于自测的测试用例,但是每次修改后,都手工测试,成本太高,于是就想到了自动化测试. 在一年前已将 Cypress 集成到管理后台的项目中,不过没有投入到实践中. ...

  10. Godot 4.0 加载为占位符(InstancePlaceholder)的用法和特点

    加载为占位符的功能设计上是用来辅助选择性加载场景的.比如一个很庞大的3D世界,玩家一时之间只会处在世界一小部分区域内,同时让整个地图驻留于内存是不现实的,此时需要选择性地灵活加载地图,使用Godot的 ...