首页 > 编程语言 >java 中使用导入 导出 excel文件( Easy Excel 2.x )

java 中使用导入 导出 excel文件( Easy Excel 2.x )

时间:2023-08-21 12:33:21浏览次数:56  
标签:java Excel void excel httpServletResponse param 导入 cmnMapper public

前提是依赖必须导入:

<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.0-beta2</version> 
</dependency>

 

导出

首先在自己的接口中创建一个方法为导出的方法:

/**
     * 数据导出
     *
     * @param httpServletResponse 接收数据信息
     */
    void exportData(HttpServletResponse httpServletResponse);

然后在实现类中实现该方法:

     /* * 数据导出    
    *
    * @param httpServletResponse 接收数据信息 */ @Override public void exportData(HttpServletResponse httpServletResponse) { try {
        //设置响应格式 httpServletResponse.setContentType("application/vnd.ms-excel");
// 编码格式 httpServletResponse.setCharacterEncoding("utf-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
// 导出的名字 String fileName = URLEncoder.encode("数据字典", "UTF-8");
// 响应的头信息 及文件名字 httpServletResponse.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); //查询数据库数据 List<Dict> dictList = baseMapper.selectList(null);
// 转换格式 转为返回给前端的vo对象 也可以不转 看自己的需求 List<DictEeVo> dictVoList = new ArrayList<>(dictList.size()); for (Dict dict : dictList) { DictEeVo dictVo = new DictEeVo(); BeanUtils.copyProperties(dict, dictVo, DictEeVo.class); dictVoList.add(dictVo); }
// 转换完成进行写入然后写入 EasyExcel.write(httpServletResponse.getOutputStream(), DictEeVo.class).sheet("数据字典").doWrite(dictVoList); } catch (IOException e) { e.printStackTrace(); } }

最后在Controller层编写接口 调用实现类中的方法:

 /**
     * 导出数据信息
     */
    @GetMapping("export/data")
    public void exportData(HttpServletResponse response) {
        cmnService.exportData(response);
    }

导入

首先跟上面一样 设置导入接口:

/**
     * 导入数据
     *
     * @param file 上传文件信息
     */
    void importData(MultipartFile file);

导入的时候是需要的一个监听器的 :

在自己的监听文件夹中编写监听器:

 

/**
 * @author 宋
 * @date 2023/8/21 0021 11:33
 * @mood happy
 */
@Configuration
public class DictListener extends AnalysisEventListener<DictEeVo> {
    // 操作的mapper
    private final CmnMapper cmnMapper;

    // 有参构造 需要操作数据库的时候进行创建 不需要的话 可以使用无参构造
    public DictListener(CmnMapper cmn) {
        this.cmnMapper = cmn;
    }

    /**
     * 执行读取数据 一次一行
     *
     * @param dictEeVo
     * @param analysisContext
     */
    @Override
    public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
// 我是使用的mybatisPlus 所以插入的时候是需要dict对象的 需要转换 Dict dict = new Dict(); // 转换填充对象 BeanUtils.copyProperties(dictEeVo, dict); // 添加 数据信息 cmnMapper.insert(dict); } /** * 读取结束 * * @param analysisContext */ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 可以在这里做一些自己的需求操作 } }

 

然后编写实现类 进行实现:

/**
     * 导入数据
     *
     * @param file 上传文件信息
     */
    @Override
    public void importData(MultipartFile file) {
        try {
// 直接使用流的形式写入 参数二 封装的什么对象 参数三 监听器(有参构造传参 无参构造无需传参) EasyExcel.read(file.getInputStream(), DictEeVo.class, new DictListener(cmnMapper)).sheet().doRead(); } catch (IOException e) { e.printStackTrace(); } }

如果上面传的参数 cmnMapper 找不到 爆红 就在自己的这个类中 加上 注入一下:

 @Autowired
    CmnMapper cmnMapper;

结束 快乐的一天 希望每天快乐

标签:java,Excel,void,excel,httpServletResponse,param,导入,cmnMapper,public
From: https://www.cnblogs.com/smilevv/p/17645705.html

相关文章

  • JavaScript中的“函数式编程”
    前言我们虽然之前老是听说过“函数式编程”,但一直不能理解,我们静下心来研究了一下,才发现这些东西真的很巧妙。在React这些框架中,对象,函数为王,因为框架已经帮你打建好了在框架中,数据为王,那些函数本身就是用来处理数据这里我们要用更高层的思维,而放弃底层思维,这些本身都是用户数......
  • JavaScript中的数值
    JavaScript中的主要数值类型是Number类型,用于表示整数和近似的实数。JavaScript采用了由IEEE754标准定义的64位浮点格式来表示数值。这意味着JavaScript可以表示最大整数±1.7976931348623157×10^308和最小整数±5×10^-324。JavaScript中的这种数值格式允许我们准确......
  • Java调试绘帧
    1.打印栈回溯(1)直接使用newRuntimeException("stack_dump").printStackTrace();1publicclassOuter{2privateintx=10;34publicvoidprint(){5Innerinner=newInner();6inner.print();7}8clas......
  • Java-logback.xml配置
    <?xmlversion="1.0"encoding="UTF-8"?><configurationdebug="false"><!--定义日志文件的存储地址勿在LogBack的配置中使用相对路径--><propertyname="LOG_HOME"value="\logs"/><!--控制台输出-......
  • Java前端上传文件后,将文件传输到后端,并将文件上传到FTP服务器上
    当我们在前端上传文件后,需要将文件传输到后端,并将文件上传到FTP服务器上。在Java中,我们可以使用ApacheCommonsNet库来实现FTP文件上传。下面是一个简单的示例,演示了如何在Java中实现前端上传文件后端接收并上传到FTP服务器的过程。前端上传文件首先,在前端页面中,我们需要一个文件......
  • [完结25章]Java七大热门技术框架源码解析
    点击下载:[完结25章]Java七大热门技术框架源码解析提取码:ygnz《Java七大热门技术框架源码解析》已完结25章,任何框架都是有助于更快更好地开发软件解决方案的工具之一。框架的基本原理不必重新发明轮子。框架使开发人员的工作变得更轻松,并帮助他们专注于业务逻辑,而不必担心通用的......
  • 《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,夯实底层基础 —— 吃透cla
    前言介绍了解Java代码如何编译成字节码并在JVM上执行是非常重要的。这种理解可以帮助我们理解程序执行时发生的情况,确保语言特性符合逻辑,并在进行讨论时能够全面考虑各种因素和副作用。本文将深入探讨Java代码编译成字节码并在JVM上执行的过程。如果您对JVM的内部结构和字节码执行......
  • Linux下后台运行Java程序
    1、背景描述用Java编写了一个程序(可执行的jar),需要在Linux中启动并持续运行1.1、直接执行程序直接执行程序后,在程序执行期间,无法在当前会话中再执行其他操作1.2、直接执行程序后中断直接执行程序后,按Ctrl+C中断;这时虽然可以在当前会话中执行其他操作,但是程序也结束运行......
  • Java网络编程:IO、NIO
    Socket套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。看不懂?别急,先回忆一下大学学的计算机网络。物理......
  • 8 JavaScript函数
    8JavaScript函数在JS中声明函数和python差不多.也要有一个关键字顶在前面.python是def,到了JS里换成了function,只不过在JS中没有像python那么死板,必须def后面必须跟上函数名.这也为我们未来做逆向提供了第一个超大的伏笔.//语法//声明函数function函数名(形参1,......