使用VUE+SpringBoot+EasyExcel 整合导入导出数据的教程详解

使用VUE+SpringBoot+EasyExcel 整合导入导出数据的教程详解

简介

数据的导入导出是一个web应用中很重要的功能,在开发中,往往需要对数据进行批量导入和导出。本文将介绍如何使用Vue+SpringBoot+EasyExcel进行数据的导入导出。

技术栈

  1. 前端:Vue.js

  2. 后端:SpringBoot

  3. 数据导入导出库:EasyExcel

准备工作

首先,需要安装并配置好Vue.js和SpringBoot。如果还没有安装的话,可以去官网查看详细的安装教程。

在此之上,我们还需要安装EasyExcel。EasyExcel 是阿里巴巴的开源 Java 项目,它实现了对 Excel 的读写操作,并提供了非常便捷的 API。我们可以通过引入依赖来使用 EasyExcel。

在SpringBoot中,可以使用以下方式引入 EasyExcel 的依赖:

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

具体步骤

导入数据

1.编写数据模型

首先,需要定义一个与 Excel 文件中的数据对应的数据模型。可以通过以下代码定义一个用户模型:

@Data
public class User {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty("性别")
    private String gender;

    @ExcelProperty("手机号")
    private String phone;
}

在这个模型中,@ExcelProperty 注解表示该属性与 Excel 文件的某个单元格对应。

2.编写导入逻辑

接下来,可以编写一个上传 Excel 文件并导入数据的接口。可以使用 SpringMVC 提供的 @RequestParam 注解来接收上传的文件。接着,通过EasyExcel的ReadExcel类,将上传的 Excel 文件解析成数据模型,然后保存到数据库中。

以下是一个简单的导入数据的代码示例:

@PostMapping("/import")
public ResultVO importUser(@RequestParam("file") MultipartFile file) {
    String filename = file.getOriginalFilename();
    try {
        List<User> userList = EasyExcel.read(file.getInputStream(), User.class, new UserListener()).sheet().doReadSync();
        userService.insertBatch(userList);
        return ResultVO.success();
    } catch (IOException e) {
        e.printStackTrace();
        return ResultVO.fail("上传失败,请重试。");
    }
}

在这个代码片段中,UserService 是一个服务类,insertBatch 方法将批量插入数据到数据库中。UserListener 是继承分析头和分析行监听器的类,用于校验数据。在实际应用中,可以根据需要编写自定义的监听器。

3.编写前端页面

最后一步是编写一个前端页面,用于上传 Excel 文件并将数据导入到后台。

以下是一个简单的实现示例:

<template>
  <div>
    <input type="file" @change="importData"/>
  </div>
</template>

<script>
export default{
  methods: {
    importData(e){
      const file = e.target.files[0];
      if(!file){
        return;
      }
      const formData = new FormData();
      formData.append('file', file);
      axios.post('/import', formData)
      .then(res => {
        if(res.data.code === 200){
          alert('导入成功');
        } else {
          alert('导入失败');
        }
      })
      .catch(err => {
        console.error(err);
      });
    }
  }
}
</script>

在这个实现中,我们通过 file 类型的 input 元素来选择 Excel 文件。在选择上传的 Excel 文件后,通过 FormData 将文件上传到后台,然后调用后台提供的接口来导入数据。

导出数据

导出数据和导入数据很类似,只是操作的反过来了。下面我们详细解释一下如何导出数据。

1.编写导出逻辑

首先,需要编写一个查询数据的接口,然后将查询到的数据返回给前端。

然后通过EasyExcel的WriteExcel类,将数据写入Excel文件,并把excel文件返回给用户。

以下是一个简单的导出数据的代码示例:

@GetMapping("/export")
public void exportUser(HttpServletResponse response){
    String name = "用户信息.xlsx";
    try {
        List<User> userList = userService.selectAll();
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(name, "UTF-8"));
        EasyExcel.write(response.getOutputStream(), User.class).sheet("用户信息").doWrite(userList);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在这个代码中,selectAll() 方法是从数据库中查询数据的。然后,通过设置响应的 ContentType 和 Content-Disposition 把 Excel 文件输出到前端。

2.编写前端页面

最后一步是编写一个前端页面,用于触发导出数据的接口。

以下是一个简单的实现示例:

<template>
  <div>
    <button type="button" @click="exportData">导出数据</button>
  </div>
</template>

<script>
export default{
  methods: {
    exportData(){
      axios.get('/export', {responseType: 'blob'})
      .then(res => {
        const url = window.URL.createObjectURL(res.data);
        const link = document.createElement('a');
        link.style.display = 'none';
        link.href = url;
        link.setAttribute('download', '用户信息.xlsx');
        document.body.appendChild(link);
        link.click();
      })
      .catch(err => {
        console.error(err);
        alert('导出失败');
      });
    }
  }
}
</script>

在这个实现中,我们通过一个按钮来触发导出数据。在按钮的点击事件中,我们使用 axios.get 请求后端的导出接口,并设置响应的 responseType 为 blob,然后在成功响应时,将接收到的 blob 数据转为 blob URL,并创建一个 a 标签,设置 href 和 download 属性,模拟用户点击 a 标签来触发下载。

结语

本文主要介绍了如何使用 Vue + SpringBoot + EasyExcel 实现数据的批量导入和导出。当然,本文中的实现只是一个简单的示例,实际应用中还需要根据具体需求做更详细的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用VUE+SpringBoot+EasyExcel 整合导入导出数据的教程详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue数据更新UI不刷新显示的解决办法

    我来为您讲解“Vue数据更新UI不刷新显示的解决办法”的完整攻略。 问题描述 当我们使用Vue框架开发网页时,有时候会发现数据已经修改,但是UI界面并没有更新,这时候我们就需要寻找解决这个问题的办法。 原因分析 Vue框架的数据响应式更新是通过数据劫持和发布-订阅模式实现的,当数据发生改变时,Vue会自动触发更新UI的操作。但是,在一些情况下,Vue可能无法…

    Vue 2023年5月29日
    00
  • vue实现评价星星功能

    下面我将详细讲解“Vue实现评价星星功能”的完整攻略。 一、需求分析 在实现评价星星功能之前,我们需要首先明确需求,即实现一个能够显示、选择和保存星星评分数据的组件。在这个组件中,用户可以看到默认的星星评分,也可以选择一定的星星数量来提交评分数据。 二、界面设计 设计星星评价组件的界面,可以使用普通的HTML和CSS,然后在Vue里面进行引用。 其中,评分界…

    Vue 2023年5月29日
    00
  • Vue2.5通过json文件读取数据的方法

    以下是Vue2.5通过JSON文件读取数据的完整攻略。 准备工作 首先,我们需要准备好一个存储数据的JSON文件。 比如,我们准备好了一个叫做data.json的文件,里面存储了如下数据: { "name": "Vue2.5", "version": "2.5.22", &quo…

    Vue 2023年5月28日
    00
  • Vue组件之间数据共享浅析

    下面我给您详细讲解“Vue组件之间数据共享浅析”的完整攻略。 1. 背景 在Vue.js应用程序中,组件是构建块。由于Vue是基于组件的,因此在组件的通信中,通常会涉及到数据共享。组件之间数据共享是Vue应用程序中非常重要的一个主题。 2. 数据共享方式 在Vue.js应用程序中,常见的组件之间的数据共享方式有以下3种: 2.1. 父子组件之间的数据传递 父…

    Vue 2023年5月28日
    00
  • Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    Vue组件间通信方法总结 Vue组件通信是Vue开发者必须掌握的技能之一。本文将总结Vue中组件间通信的各种方法,包括父子组件、兄弟组件及祖先后代组件间通信。 父子组件通信 父子组件通信是Vue中最常见的通信方式。下面分别介绍组件间通信的几种方法。 Props 在Vue中父组件可以通过Props向子组件传递数据,子组件通过props选项接收父组件传递过来的数…

    Vue 2023年5月28日
    00
  • vue+axios全局添加请求头和参数操作

    下面是详细讲解“vue+axios全局添加请求头和参数操作”的完整攻略。 1. 添加全局请求头 1.1 在 Vue 项目中安装 Axios 在 Vue 项目中使用 Axios 首先需要安装 Axios。可以通过以下命令安装: npm i axios -S 1.2 声明 Axios 在 Vue 项目中创建一个 axios.js 文件,然后声明 Axios 并设…

    Vue 2023年5月28日
    00
  • vue利用openlayers实现动态轨迹

    “vue利用openlayers实现动态轨迹”的实现过程中,需要安装openlayers、esri-leaflet等相关库,而vue可以利用npm进行安装,具体步骤如下: 安装依赖库 npm install ol esri-leaflet –save 在Vue中引入openlayers和esri-leaflet import ‘ol/ol.css’ imp…

    Vue 2023年5月28日
    00
  • vue检测对象和数组的变化分析

    Vue.js 是一个高效的 JavaScript 前端框架,提供了一系列的数据绑定和视图组件化功能。其中,Vue.js 通过侦听数据变化的方式来高效地触发 DOM 渲染更新。在实现这一功能的过程中,Vue.js 采用了一个名为“响应式系统(Reactivity System)”的机制,该机制主要用来检测对象和数组的变化。下面,我将简要介绍 Vue.js 的“…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部