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

yizhihongxing

当使用 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 自定义指令是一个可以重复使用的指令,可以用于操作 DOM 元素。我们可以使用 Vue 中内置的一些指令,如 v-if、v-show 等等。自定义指令允许我们在 Vue 中增加自定义指令,来满足一些特殊的需求。 Vue 自定义指令的基本生命周期函数 Vu…

    Vue 2023年5月27日
    00
  • vue父子组件之间的传参的几种方式小结

    vue父子组件之间的传参的几种方式小结 在Vue.js应用程序中,组件是构成应用程序的基本组成部分。在一个应用程序中,有可能会有很多个组件,而这些组件之间可能需要进行参数传递。而在组件之间进行数据传递,我们通常把“子组件”称为“子孙组件”,把“父组件”称为“父祖组件”。 在Vue.js中,有多种方式可以实现父子组件之间的数据传递。以下是比较常见的几种方式: …

    Vue 2023年5月27日
    00
  • Vue如何实现组件间通信

    Vue 提供了很多种实现组件间通信的方案,包括组件属性、事件、自定义事件和全局事件总线等方法。我们可以根据具体情况来选择其中一种方案来解决组件间通信的问题。 组件属性 组件属性是一种比较简单的组件间通信的方式,它通过在父组件中绑定属性,在子组件中通过 props 属性来接收父组件中传递过来的数据。父组件可以将自己的数据传递到子组件中,而子组件只能被动地接收。…

    Vue 2023年5月29日
    00
  • Uniapp全局消息提示以及其组件的实现方法

    Uniapp是一个跨端开发框架,使得我们可以非常方便地开发和部署多种移动端应用。在开发移动应用时,全局消息提示是一个必不可少的功能,这可以让用户在操作后接收到系统的反馈以便更好地交互。 Uniapp提供了一个uni.showToast()的API方法,可以让我们在全局范围内显示消息提示。下面是如何使用该API的方法: uni.showToast({ titl…

    Vue 2023年5月28日
    00
  • Vue中遍历数组的新方法实例详解

    下面我就为您详细讲解“Vue中遍历数组的新方法实例详解”。 介绍 在Vue 2.6.0版本以后,新增了一个数组方法v-for,它主要用于遍历一个数组并渲染每个数组元素。 v-for能够将一个数组映射为一组元素,并为每个元素执行一次模板,因此它的应用场景非常广泛,尤其在将复杂数据渲染到界面上时,更是体现了它的优势。 下面就重点介绍一下v-for在其中的应用。 …

    Vue 2023年5月28日
    00
  • 浅谈基于Vue.js的移动组件库cube-ui

    浅谈基于Vue.js的移动组件库cube-ui 介绍 cube-ui是一个基于 Vue.js 的移动端组件库。它提供了很多常用的移动端 UI 组件,可以快速构建高质量的移动应用。cube-ui 在使用上都使用单文件组件,非常适合 Vue.js 开发者。它是由滴滴出行开源的。 安装 先使用npm安装vue-cli,再使用vue-cli构建项目 $ npm in…

    Vue 2023年5月28日
    00
  • Vue的列表之渲染,排序,过滤详解

    Vue的列表之渲染,排序,过滤详解 在Vue中,渲染、排序、过滤列表是非常常见的需求。Vue提供了强大的指令和方法来实现这些需求,下面将分别进行详细介绍。 列表渲染 Vue中通过v-for指令可以很容易地渲染数组或对象列表。下面是一个v-for指令的示例: <ul> <li v-for="item in items"&g…

    Vue 2023年5月28日
    00
  • Vue.js实现的购物车功能详解

    下面是“Vue.js实现的购物车功能详解”的完整攻略。 确定需求 在开始Vue.js实现购物车功能之前,我们需要先明确我们的需求,包括: 需要展示商品列表; 需要将商品添加到购物车中; 需要展示购物车中的商品列表; 需要对购物车中的商品进行增删操作; 需要实时展示购物车总价。 准备工作 实现此功能需要准备以下工作: 安装Vue.js的开发环境; 准备好商品数…

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