elementui导出数据为xlsx、excel表格

yizhihongxing

ElementUI是一款基于Vue.js的组件库,提供了丰富的UI组件,其中也包含了导出Excel表格的功能。下面是ElementUI导出数据为xlsx、excel表格的详细攻略:

第一步:安装依赖

首先,在项目中导出Excel表格需要安装以下依赖:

npm install -S file-saver xlsx

其中,file-saver用于文件下载,xlsx用于数据处理和生成Excel表格。

第二步:引入ElementUI组件

在需要生成Excel表格的Vue页面中,引入ElementUI组件:

<template>
  <div>
    <el-button type="primary" icon="el-icon-download" @click="handleDownload">导出Excel</el-button>
  </div>
</template>

<script>
import { exportFile } from 'element-ui/lib/utils/export';
// 其他import内容 ...

export default {
    // 其他组件配置 ...
    methods: {
        handleDownload() {
            // 导出Excel表格的方法
        }
    }
}
</script>

其中,import的export是ElementUI内部封装的导出功能,依赖xlsx和file-saver库。

第三步:生成Excel表格数据

生成Excel表格需要一个包含数据的数组,然后转换为xlsx格式的二进制流。这里提供两个示例。

示例1:表格数据包含多个sheet

data() {
    return {
        // 表格数据
        tableData: [
            {id: 1, name: '小红', age: 23},
            {id: 2, name: '小明', age: 25},
            {id: 3, name: '小华', age: 27},
        ]
    }
},
methods: {
    async handleDownload() {
        const wb = xlsx.utils.book_new();
        const ws1 = xlsx.utils.json_to_sheet(this.tableData);
        const ws2 = xlsx.utils.json_to_sheet([{id: 1, value: 'hello world'}]);
        xlsx.utils.book_append_sheet(wb, ws1, 'Sheet1');
        xlsx.utils.book_append_sheet(wb, ws2, 'Sheet2');
        const data = xlsx.write(wb, {bookType: 'xlsx', type: 'array'});
        exportFile(data, 'test.xlsx', 'xlsx');
    },
}

以上代码将数据this.tableData转换为一个Sheet表,同时增加了另一个Sheet表。

示例2:表格数据包含图片

data() {
    return {
        // 表格数据
        tableData: [
            {id: 1, name: '小红', age: 23, img: 'https://xxx.jpg'},
            {id: 2, name: '小明', age: 25, img: 'https://xxx.png'},
            {id: 3, name: '小华', age: 27, img: 'https://xxx.gif'},
        ]
    }
},
async handleDownload() {
    const wb = xlsx.utils.book_new();
    const ws = xlsx.utils.json_to_sheet(this.tableData);
    // 遍历数据,增加图片
    this.tableData.forEach((item, index) => {
        const img = new Image();
        img.setAttribute('crossOrigin', 'anonymous');
        img.src = item.img;
        img.onload = () => {
            const ctx = this.$el.querySelector('#canvas').getContext('2d');
            ctx.drawImage(img, 0, 0, 60, 60);
            const imageData = ctx.getImageData(0, 0, 60, 60);
            const base64 = btoa(
                String.fromCharCode.apply(null, imageData.data)
            );
            xlsx.utils.sheet_add_aoa(ws, [
                ['<img src="data:image/png;base64,' + base64 + '"/>'],
            ], {
                origin: { r: index + 1, c: 4}
            });
            xlsx.utils.book_append_sheet(wb, ws, 'Sheet1');
            const data = xlsx.write(wb, {bookType: 'xlsx', type: 'array'});
            exportFile(data, 'test.xlsx', 'xlsx');
        };
    });
},

以上代码遍历表格数据中的每一项,将对应图片绘制在Canvas上,再将Canvas通过toDataURL方法生成base64编码,通过sheet_add_aoa方法增加到Excel表格中。

以上就是ElementUI导出数据为Excel的完整攻略,其中包含了两条示例说明,希望可以对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:elementui导出数据为xlsx、excel表格 - Python技术站

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

相关文章

  • vue将毫秒数转化为正常日期格式的实例

    下面是Vue将毫秒数转化为正常日期格式的实例的完整攻略。 1. 需求背景 有时候我们需要在项目中把毫秒数转化为正常的日期格式。比如我们有一个后端接口返回的时间戳是一个13位的毫秒数,我们需要把它转化为正常的日期格式方便用户查看。 2. 数字转化为日期 在Vue中,我们可以使用Date对象和moment.js库将数字转化为日期。 2.1 使用Date对象转化为…

    Vue 2023年5月29日
    00
  • vue3使用vuex实现页面实时更新数据实例教程(setup)

    下面是详细讲解“vue3使用vuex实现页面实时更新数据实例教程(setup)”的完整攻略。 一、什么是Vuex Vuex是一个专为Vue.js设计的状态管理模式,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex中包含了:state,mutations,actions,getters和modules等模块。其…

    Vue 2023年5月27日
    00
  • 详解Vue.js在页面加载时执行某个方法

    想要在Vue.js页面加载的时候执行某个方法,可以利用Vue的生命周期函数,其中mounted()钩子函数会在该Vue实例被挂载到 DOM 后执行。下面详细介绍实现步骤: 第一步:定义一个 Vue 实例 首先需要定义一个 Vue 实例,这个 Vue 实例只需要有 el 属性和 data 属性,如下所示: Vue({ el: ‘#app’, data: { m…

    Vue 2023年5月28日
    00
  • Vue3 源码导读(推荐)

    下面就详细讲解一下“Vue3 源码导读(推荐)”的完整攻略。 概述 在Vue.js开发过程中,我们都知道Vue.js是一个非常好用的MVVM框架,而Vue.js3的发布也备受关注。Vue.js 3.0采用完全重写的方式,核心代码相比2.x版本变化较大,提高了性能。 导读 为了能够更好地学习Vue.js 3.0,我们需要先了解Vue.js 3.0的源码结构和架…

    Vue 2023年5月27日
    00
  • Vue中this.$nextTick的作用及用法

    Vue.js 是一个流行的JavaScript框架,结合了大量的模板语法、组件化和数据响应机制等特性,方便开发者构建交互式的Web应用。而this.$nextTick则是Vue.js框架中的一个非常重要的API,用于解决Vue更新DOM所带来的异步问题,下面就来详细讲解Vue中this.$nextTick的作用及用法: 什么是this.$nextTick? …

    Vue 2023年5月28日
    00
  • vue实现单点登录的方式汇总

    下面是“Vue实现单点登录的方式汇总”的完整攻略。 概述 单点登录(Single Sign-On,简称SSO)是一种授权机制,允许用户使用一组凭证登录到多个相关但相互独立的软件系统中,而不需要多次输入身份验证信息。这在大型企业或者多个系统共存的情况下非常常见。 Vue框架作为目前最为流行的前端框架之一,在实现单点登录方面也提供了多种解决方案。本篇文章将会介绍…

    Vue 2023年5月28日
    00
  • Vue3获取DOM节点的3种方式实例

    下面是Vue3获取DOM节点的3种方式实例的详细攻略: 1. 通过ref引用获取DOM节点 我们可以给DOM元素添加ref属性,然后在Vue模板中通过ref的值进行引用,从而获取DOM节点。具体操作步骤如下: 在Vue模板中添加ref属性 <template> <div> <button ref="btn"&…

    Vue 2023年5月28日
    00
  • 微前端qiankun改造日渐庞大的项目教程

    我们来详细讲解一下“微前端qiankun改造日渐庞大的项目教程”: 一、前期准备 首先需要了解什么是微前端以及 qiankun 框架的使用方法,建议先阅读qiankun 官方文档和微前端的相关文章。 其次,需要先对原有系统代码进行分析,找出哪些部分需要进行微前端改造,比如将一些独立的模块作为子应用嵌入到主应用中,或者将原有的模块拆分成多个子应用,让其独立运行…

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