vue2.0 + element UI 中 el-table 数据导出Excel的方法

当使用 Vue2.0 + Element UI 开发项目时,我们有时需要将 el-table 的数据导出为 Excel 文件,以方便用户进行数据的离线查看和分析。下面是在 Vue2.0 + Element UI 中实现 el-table 数据导出 Excel 的具体步骤:

步骤一:引入文件

首先,需要引入以下文件:

<script src="//cdn.bootcdn.net/ajax/libs/xlsx/0.14.3/xlsx.full.min.js"></script>
<script src="//cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>

其中,xlsx.full.min.js 是 xlsx 库的核心文件,提供了将 Excel 文件转换为二进制流或者 JSON 格式的方法。FileSaver.min.js 则是文件下载库,用于将导出结果保存为 Excel 文件。

如果你是采用 Vue CLI 直接搭建项目的话,可以在 public/index.html 中添加上述代码;如果是手动搭建项目,则需要在页面的 head 标签中引入。

步骤二:定义导出方法

接着,我们需要在 Vue 文件中定义一个导出 Excel 的方法,如下所示:

function exportExcel(headers, data, fileName) {
  const Worksheet = XLSX.utils.json_to_sheet(data);
  const Workbook = {
    Sheets: { data: Worksheet },
    SheetNames: ["data"]
  };
  const ExcelBuffer = XLSX.write(Workbook, {
    bookType: "xlsx",
    type: "array"
  });
  const ExcelBlob = new Blob([ExcelBuffer], { type: "application/octet-stream" });
  saveAs(ExcelBlob, fileName + ".xlsx");
}

其中,headers 是表头数据,data 是表格数据,fileName 是要保存的文件名。该方法中,我们使用了 xlsx 库的 json_to_sheet 方法将数据转换为 Excel 的表格格式,然后使用 XLSX.write 方法将该表格转换为二进制流,最后使用 saveAs 方法将结果保存为 Excel 文件。

步骤三:调用导出方法

最后,在需要导出 Excel 的地方,我们可以给 el-table 绑定 el-table__bodyref,然后在代码中调用导出函数,如下所示:

<el-table
  :data="tableData"
  style="width: 100%"
  :ref="el => (this.tableRef = el.$refs['el-table__body'])"
>
  <el-table-column prop="date" label="日期" width="180"></el-table-column>
  <el-table-column prop="name" label="姓名" width="180"></el-table-column>
  <el-table-column prop="address" label="地址"></el-table-column>
</el-table>

<el-button @click="handleExportExcel">导出 Excel</el-button>
methods: {
  handleExportExcel() {
    const tableRef = this.$refs.tableRef.$el; // 先获取 el-table__body 的 DOM 节点
    const headers = this.$refs.tableRef.columns.map(item => item.label);
    const data = [];
    for (let i = 0, len = tableRef.children.length; i < len; i++) {
      const row = {};
      const cols = tableRef.children[i].children;
      for (let j = 0, jLen = cols.length; j < jLen; j++) {
        const cell = cols[j].querySelector(".cell");
        row[headers[j]] = cell ? cell.innerText : "";
      }
      data.push(row);
    }
    exportExcel(headers, data, "导出数据");
  }
}

在上述代码中,我们使用了 map 方法获取了表头数据,然后遍历了 el-table__body 中的每一行数据,在每一行数据中使用了 querySelector 方法获取了每一个单元格的数据,并保存在了 data 数组中。最后,我们将数据和表头传入导出函数中即可。

下面是两个示例:

示例一:只导出当前页面数据

当表格数据比较少时,可以直接将当前表格的数据导出。代码如下:

handleExportExcel() {
  const tableRef = this.$refs.tableRef.$el;
  const headers = this.$refs.tableRef.columns.map(item => item.label);
  const data = [];
  for (let i = 0, len = tableRef.children.length; i < len; i++) {
    const row = {};
    const cols = tableRef.children[i].children;
    for (let j = 0, jLen = cols.length; j < jLen; j++) {
      const cell = cols[j].querySelector(".cell");
      row[headers[j]] = cell ? cell.innerText : "";
    }
    data.push(row);
  }
  exportExcel(headers, data, "导出数据");
}

示例二:导出全部数据

当表格数据比较多时,可能需要将全部数据进行分页或者滚动加载,此时我们可以采用以下方法将全部数据导出。需要注意的是,该方法会将表格数据全部加载到内存中,可能会占用较大的内存空间,建议在数据量较小的情况下使用。代码如下:

handleExportExcel() {
  const headers = this.tableColumns.map(item => item.label);
  const data = [];
  const loadAll = async () => {
    let pageno = 1;
    let total = 1;
    while (pageno <= total) {
      const { data: tableData } = await this.getTableData(pageno, this.pageSize);
      data.push(...tableData);
      pageno++;
      total = this.totalPages;
    }
    exportExcel(headers, data, "导出数据");
  };
  loadAll();
}

在上述代码中,我们先获取了表头数据,然后定义了一个 loadAll 函数,该函数使用异步循环的方式,将全部数据加载到 data 数组中。其中,this.getTableData 是获取数据的异步方法,返回的数据格式需要为 { data: [], total: 0 }this.pageSizethis.totalPages 是分页和总页数的相关属性,需要自行定义。最后,调用导出函数即可。

好了,以上就是在 Vue2.0 + Element UI 中 el-table 数据导出 Excel 的完整攻略。希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue2.0 + element UI 中 el-table 数据导出Excel的方法 - Python技术站

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

相关文章

  • Vue学习笔记进阶篇之函数化组件解析

    Vue学习笔记进阶篇之函数化组件解析,主要涉及Vue中的函数化组件,对于Vue的一些高级使用场景有很大的帮助作用。在本篇攻略中,我将为大家详细介绍函数化组件的概念、特点以及使用方法,并且会给出一些实际的使用示例。 什么是函数化组件 函数化组件,简称函数组件,是Vue中一种新的组件书写方式。与传统的Vue组件相比,函数组件去掉了<template>…

    Vue 2023年5月27日
    00
  • 详解在vue-cli中使用graphql即vue-apollo的用法

    下面我将详细讲解vue-cli中使用graphql及vue-apollo的用法。具体步骤如下: 环境准备 在使用vue-cli和vue-apollo之前,需要先安装Node.js和npm。这里推荐使用最新版本的Node.js和npm。 安装vue-cli Vue-cli是Vue.js官方提供的工具,用于快速搭建Vue.js项目。通过vue-cli可以帮助我们…

    Vue 2023年5月28日
    00
  • vue element实现将表格单行数据导出为excel格式流程详解

    下面是关于“vue element实现将表格单行数据导出为excel格式流程详解”的攻略,包含了完整的代码和实现流程。 1. 安装所需工具 首先,我们需要安装一些工具,包括: vue – 一个流行的JavaScript框架 element-ui – 一个基于vue的UI组件框架 xlsx – 一个用于处理Excel文件的JavaScript库 你可以使用以下…

    Vue 2023年5月27日
    00
  • Vue3 构建 Web Components使用详解

    Vue3 构建 Web Components使用详解 Web Components 是一种新的 Web 技术,它可以让 Web 开发者更加灵活地创建自定义标签,实现跨框架、跨库的组件化开发。Vue3 作为当前最流行的前端框架之一,也支持使用 Web Components 扩展其功能。 什么是 Web Components Web Components 是一种…

    Vue 2023年5月28日
    00
  • Vue3 中的插件和配置推荐大全

    Vue3 中的插件和配置推荐大全 一、插件 1. Vue Router Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。 在 Vue3 中,Vue Router 也进行了更新,现在使用 createRouter 方法来替代之前的 new VueRouter 方法。 示例代码: imp…

    Vue 2023年5月28日
    00
  • Vue 使用formData方式向后台发送数据的实现

    下面是关于“Vue 使用formData方式向后台发送数据的实现”的详细攻略说明。 一、什么是FormData? FormData 是在使用 AJAX 时发送表单数据的技术。它是一种用于传输表单文件和表单数据的对象。 二、Vue上使用FormData方式向后台发送数据的实现 1. 在Vue中使用axios 在 Vue 中发送 AJAX 请求通常使用 axio…

    Vue 2023年5月28日
    00
  • Vue分析同步和异步有什么区别

    Vue分析同步和异步的区别是一个非常重要的概念,在我们设计和开发Vue应用程序的过程中需要非常清楚。本篇攻略将详细讲解Vue中同步和异步的概念,并通过两个示例说明它们之间的区别。 什么是同步和异步? 在JavaScript中,同步和异步是指代码执行的方式。同步代码按顺序执行,也就是说当一个函数被调用时,代码会等待函数内部所有的操作完成后,才会执行下一个代码块…

    Vue 2023年5月27日
    00
  • Vue3和Vite不得不说的那些事

    下面是关于“Vue3和Vite不得不说的那些事”的完整攻略。 什么是Vue3和Vite Vue3是Vue.js在2020年9月正式发布的一次重大版本更新,Vue3相较于Vue2来说,带来许多令人激动的新特性,包括Composition API、性能优化等。其中,Composition API是最大的亮点之一,它能够让开发者更好地组织和重用组件逻辑。 Vite…

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