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封装DateRangePicker组件流程详细介绍

    下面我将为你详细讲解Vue封装DateRangePicker组件的流程详细介绍,包含以下步骤: 1. 确定需求 在开始封装之前,需要确定需求。在本例中,我们需要封装一个DateRangePicker组件。这个组件需具有以下特点: 支持选择起始时间和结束时间 支持不同的时间格式 支持自定义样式 支持禁用日期 2. 确定依赖 在确定了需求之后,需要确定依赖。在本…

    Vue 2023年5月29日
    00
  • vue新vue-cli3环境配置和模拟json数据的实例

    下面我将给出“Vue新vue-cli3环境配置和模拟json数据的实例”的详细攻略。 环境配置 安装Node.js 在官网下载 Node.js,选择对应系统的版本进行安装。 安装Vue CLI 3 打开命令行终端,输入命令: npm install -g @vue/cli 等待安装完成即可。 创建Vue项目 创建项目 打开命令行终端,进入要创建项目的目录,输…

    Vue 2023年5月27日
    00
  • Vue计算属性中reduce方法实现遍历方式

    下面我会详细介绍一下“Vue计算属性中reduce方法实现遍历方式”的攻略。 什么是计算属性? 在Vue中,计算属性是指可以基于已有的属性通过计算得到新值的属性,这种属性可以方便地进行数据绑定和监听,同时也可以进行缓存优化。 reduce方法的实现方式 在Vue的计算属性中,我们可以使用reduce方法来实现遍历的功能,它可以用来累计前面的值,并返回累计结果…

    Vue 2023年5月29日
    00
  • Vue报错:TypeError: Cannot create property ‘xxxx‘ on的解决

    当 Vue 报出 “TypeError: Cannot create property ‘xxxx’ on” 类型的错误时,通常是由于在组件中调用了未定义的数据或方法。这种错误的解决方案可能有很多,我们可以从以下几个方面来处理: 检查组件的数据 首先,我们需要检查组件中使用的数据,确保其已在组件中初始化或定义。如果该数据是作为组件属性传入的,则需要确保传入的…

    Vue 2023年5月27日
    00
  • Vue拖拽排序组件Vue-Slicksort解读

    下面是详细讲解“Vue拖拽排序组件Vue-Slicksort解读”的完整攻略。 概述 Vue-Slicksort 是一个可拖拽排序组件,其支持排序项的拖拽、交换、插入、删除之类的操作,非常适用于管理后台等需要排序功能的场景。 Vue-Slicksort 的主要特点是高度可定制和易于配置。它封装了一个 Drag and Drop 库,可以直接应用在 Vue.j…

    Vue 2023年5月29日
    00
  • vue简单练习 桌面时钟的实现代码实例

    下面是关于“vue简单练习 桌面时钟的实现代码实例”的完整攻略。 一、实现时钟的HTML结构 首先,我们需要在HTML中添加一个 元素,用来展示时钟: <div id="app"> <h1>Vue 时钟</h1> <div class="clock"> <span …

    Vue 2023年5月29日
    00
  • vue实现前端列表多条件筛选

    下面是“vue实现前端列表多条件筛选”的完整攻略: 准备工作 首先需要引入Vue.js和element-ui组件库。除此之外,还需要一个数据列表和一个查询条件对象。 实现步骤 1. 查询条件的展示 使用element-ui组件库提供的Form组件渲染查询表单。每个查询条件使用FormItem包装,FormItem的label属性即为查询条件的名称,Prop属…

    Vue 2023年5月28日
    00
  • Vue3新状态管理工具实例详解

    Vue3新状态管理工具实例详解 Vue.js是一个基于MVVM模式的前端框架,目前Vue.js的使用非常普及和流行。在Vue.js的应用开发中,状态管理是必不可少的一部分,因此Vue.js提供了Vuex状态管理工具来帮助我们进行管理和组织应用中的状态数据。而最新的Vue.js版本——Vue3也推出了新的状态管理工具——@vue/reactivity。 什么是…

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