vue+element表格导出为Excel文件

yizhihongxing

接下来我将详细讲解如何使用Vue和Element UI来实现表格导出为Excel文件,具体步骤如下:

1. 安装必要的依赖

第一步是安装必要的依赖,包括 xlsx 库和 file-saver 库。可以使用npm或者yarn来安装依赖,命令如下:

npm install xlsx file-saver --save
yarn add xlsx file-saver

2. 引入Element UI

可以使用Element UI中的表格组件来展示数据和操作,可以通过以下方式引入:

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

3. 准备数据

准备需要导出的数据,可以在组件的 data 方法中定义一个数组,例如:

data() {
  return {
    tableData: [
      {date: '2022-01-01', name: 'Tom', score: 80},
      {date: '2022-01-01', name: 'Jack', score: 90},
      {date: '2022-01-02', name: 'Lucy', score: 70},
      {date: '2022-01-02', name: 'Bob', score: 60}
    ]
  }
}

4. 渲染表格

使用<el-table><el-table-column>标签来渲染表格组件,例如:

<template>
  <div>
    <el-table :data="tableData">
      <el-table-column prop="date" label="日期"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="score" label="分数"></el-table-column>
    </el-table>
    <el-button type="primary" @click="handleExport">导出Excel</el-button>
  </div>
</template>

5. 导出Excel文件

为了导出Excel文件,我们需要先创建一个Excel文件的工作簿,然后往里面写入数据。可以通过以下方式实现:

import XLSX from 'xlsx';
import FileSaver from 'file-saver';

methods: {
  handleExport() {
    // 创建工作簿对象
    const wb = XLSX.utils.book_new();

    // 创建表格对象
    const ws = XLSX.utils.json_to_sheet(this.tableData);

    // 将表格对象添加到工作簿中
    XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

    // 将工作簿转成二进制流并保存
    const wbout = XLSX.write(wb, {type: 'array', bookType: 'xlsx' });
    const fileName = 'export.xlsx';
    const file = new Blob([wbout], {type: 'application/octet-stream' });
    FileSaver.saveAs(file, fileName);
  }
}

在以上代码中,我们先创建一个工作簿对象 wb,然后将需要导出的数据 this.tableData 转成表格对象 ws,再将表格对象添加到工作簿中。这里使用了 XLSX.write 方法将工作簿转成二进制流,最后使用 file-saver 库将数据流保存到本地。

示例1

下面是一个完整的组件示例,用于展示如何使用Vue和Element UI将数据导出为Excel文件:

<template>
  <div>
    <el-table :data="tableData">
      <el-table-column prop="date" label="日期"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="score" label="分数"></el-table-column>
    </el-table>
    <el-button type="primary" @click="handleExport">导出Excel</el-button>
  </div>
</template>

<script>
import XLSX from 'xlsx';
import FileSaver from 'file-saver';

export default {
  data() {
    return {
      tableData: [
        {date: '2022-01-01', name: 'Tom', score: 80},
        {date: '2022-01-01', name: 'Jack', score: 90},
        {date: '2022-01-02', name: 'Lucy', score: 70},
        {date: '2022-01-02', name: 'Bob', score: 60}
      ]
    }
  },

  methods: {
    handleExport() {
      // 创建工作簿对象
      const wb = XLSX.utils.book_new();

      // 创建表格对象
      const ws = XLSX.utils.json_to_sheet(this.tableData);

      // 将表格对象添加到工作簿中
      XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

      // 将工作簿转成二进制流并保存
      const wbout = XLSX.write(wb, {type: 'array', bookType: 'xlsx' });
      const fileName = 'export.xlsx';
      const file = new Blob([wbout], {type: 'application/octet-stream' });
      FileSaver.saveAs(file, fileName);
    }
  }
}
</script>

<style>
/* 样式省略 */
</style>

示例2

下面是一个通过接口从后端获取数据的例子:

<template>
  <div>
    <el-table :data="tableData">
      <el-table-column prop="date" label="日期"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="score" label="分数"></el-table-column>
    </el-table>
    <el-button type="primary" @click="handleExport">导出Excel</el-button>
  </div>
</template>

<script>
import XLSX from 'xlsx';
import FileSaver from 'file-saver';

export default {
  data() {
    return {
      tableData: []
    }
  },

  methods: {
    fetchData() {
      // 通过接口获取后端数据
      // ...省略...
      this.tableData = response.data;
    },

    handleExport() {
      this.fetchData().then(() => {
        // 创建工作簿对象
        const wb = XLSX.utils.book_new();

        // 创建表格对象
        const ws = XLSX.utils.json_to_sheet(this.tableData);

        // 将表格对象添加到工作簿中
        XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

        // 将工作簿转成二进制流并保存
        const wbout = XLSX.write(wb, {type: 'array', bookType: 'xlsx' });
        const fileName = 'export.xlsx';
        const file = new Blob([wbout], {type: 'application/octet-stream' });
        FileSaver.saveAs(file, fileName);
      });
    }
  }
}
</script>

<style>
/* 样式省略 */
</style>

这个例子中,tableData 数组需要通过接口获取数据。在导出Excel文件之前,需要先调用 fetchData() 方法获取数据,然后再执行导出操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue+element表格导出为Excel文件 - Python技术站

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

相关文章

  • Vue3中事件总线的具体使用

    事件总线是 Vue 的一个重要功能,可实现在不同组件间传递数据和通知。在 Vue3 中,官方推荐使用新的 APIs 来实现事件总线。具体实现方式如下: 创建事件总线 Vue3 中通过创建一个具有事件派发功能的实例来实现事件总线功能。我们可以使用 createApp 函数创建一个实例: import { createApp } from ‘vue’; cons…

    Vue 2023年5月29日
    00
  • 前端面试之vue2和vue3的区别有哪些

    下面是“前端面试之vue2和vue3的区别有哪些”的完整攻略。 1. Vue2与Vue3的区别 Vue3相比于Vue2在性能、API以及组合式API等方面做了很多的优化和改进。 1.1 性能 Vue3在渲染性能方面做出了很多的调整,如通过编译器对hr函数进行内联处理、优化模板中的静态内容、通过Fragments(片段)降低内存使用等。同时,Vue3还引入了响…

    Vue 2023年5月29日
    00
  • vue axios封装httpjs,接口公用配置拦截操作

    Vue.js 是一种流行的前端框架,它提供了很多有用的工具来简化前端开发。而 Axios 是一种非常流行的、基于 Promise 的 HTTP 客户端。在 Vue.js 中使用 Axios 需要进行一些额外的配置,对于许多开发者来说这可能会变得非常烦琐。因此,我们通常会使用一个叫做“axios 封装库”的工具来简化这个过程。 本篇攻略就是为了介绍如何使用 A…

    Vue 2023年5月28日
    00
  • 使用vue打包时gzip压缩的两种方案

    下面给出两种使用vue打包gzip压缩的方案: 1. 使用webpack插件 vue-cli3已经默认安装好了webpack,并且支持gzip压缩。可以在项目的vue.config.js文件中添加如下配置: module.exports = { chainWebpack: config => { // 开启gzip压缩 config .plugin(‘…

    Vue 2023年5月29日
    00
  • 实现vuex原理的示例

    想要实现 Vuex 的原理,我们需要先理解 Vuex 的基本概念和工作原理。Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用程序的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 要实现 Vuex 的原理,可以从以下几个步骤开始: 定义状态:如同 Vuex 的定义一样,我们需要定义应用程序的所有状态…

    Vue 2023年5月29日
    00
  • vue3中使用vuex和vue-router的详细步骤

    下面是使用Vue3中使用Vuex和Vue Router的详细步骤攻略。 安装Vuex和Vue Router 使用npm或yarn命令行工具,执行以下命令来安装Vuex和Vue Router: npm install vuex vue-router 或者 yarn add vuex vue-router 在Vue项目入口文件main.js中引入Vuex和Vue…

    Vue 2023年5月28日
    00
  • Vue.js实现日历功能

    Vue.js是一个流行的JavaScript框架,可以帮助我们构建优秀的Web应用程序。在本文中,我将展示如何使用Vue.js来实现一个简单的日历功能。以下是完整攻略: 步骤一:安装和创建项目 首先,我们需要安装Vue.js,可以使用npm或yarn进行安装。在安装完成之后,我们将创建一个项目。可以使用Vue CLI进行项目初始化: vue create m…

    Vue 2023年5月29日
    00
  • vue实例成员 插值表达式 过滤器基础教程示例详解

    我将为你讲解“vue实例成员 插值表达式 过滤器基础教程示例详解”的攻略。 Vue实例成员 Vue实例是最基本的构成单元,具有许多成员属性和方法。其中,常用的实例成员包括:data、methods、computed、watch等等。 data data属性是用来注册Vue实例的数据属性。它能让Vue跟踪数据的变化,当数据变化时,它会通知到相关的视图以及组件等…

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