elementui导出数据为xlsx、excel表格

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+elementUI 复杂表单的验证、数据提交方案问题

    下面是针对“vue+elementUI 复杂表单的验证、数据提交方案问题”的完整攻略。 验证 在 Vue 中使用 Vuelidate 可以非常方便地实现表单验证。首先,需要安装 Vuelidate: npm install –save vuelidate 然后在 Vue 组件中引入 Vuelidate: import { required } from ‘…

    Vue 2023年5月28日
    00
  • Vue事件的基本操作你知道吗

    当我们使用Vue构建应用程序时,事件处理是至关重要的一部分。Vue提供了许多内置的指令和事件,可以让我们轻松地处理用户操作并响应状态变化。在本篇攻略中,我们将深入探讨Vue中事件的基本操作,同时提供一些示例说明,帮助读者更好地理解。 Vue事件概述 在Vue中,我们可以使用v-on指令来监听DOM事件。该指令可以添加到任何可以触发事件的HTML元素上,例如按…

    Vue 2023年5月27日
    00
  • 一份超级详细的Vue-cli3.0使用教程【推荐】

    一份超级详细的Vue-cli3.0使用教程 简介 Vue-cli3.0是Vue.js 官方提供的一个基于 webpack4 和 Webpack-dev-server 的脚手架工具,用于快速构建vue项目开发环境。本教程将为您带来Vue-cli3.0的完整使用攻略,从安装到构建一个简单的Vue项目,让你轻松掌握Vue-cli3.0的使用方法。 安装Vue-cl…

    Vue 2023年5月28日
    00
  • three.js 利用uv和ThreeBSP制作一个快递柜功能

    下面我将详细讲解通过利用uv和ThreeBSP制作一个快递柜功能的完整攻略。 1. 什么是ThreeBSP ThreeBSP是一种能够用于对Three.js中的3D模型进行布尔运算(Union、Intersection、Difference)的工具。有了 ThreeBSP,我们就可以用简单的API调用对3D模型的形状进行编辑、剖分、重组等操作,非常方便。 2…

    Vue 2023年5月28日
    00
  • Vue2响应式系统之嵌套

    Vue2响应式系统是Vue.js框架的核心部分,它负责将data对象转化为具有响应式特性的数据,并且当数据发生变化时,自动更新视图。在Vue2中,响应式系统支持多层嵌套,也就是说data对象中的一个属性也可以是对象或数组,它们同样可以具有响应式特性。 下面是Vue2中实现嵌套响应式数据的完整攻略: 1. 嵌套属性的定义 在Vue2中,我们可以在data对象中…

    Vue 2023年5月27日
    00
  • 详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别

    Vue.js是一款流行的JavaScript框架,可以帮助开发者轻松构建单页面应用。在Vue.js中,主要有三个文件:main.js、App.vue和page/index.vue。它们之间的区别和联系如下。 main.js main.js 是 Vue.js 应用程序的入口文件,它负责初始化 Vue.js 应用程序,并创建一个 Vue.js 实例。在 main…

    Vue 2023年5月28日
    00
  • vue如何给数组添加新对象并赋值

    首先,我们需要明确需要添加的对象的数据结构,例如: { "id": 1, "name": "John Doe", "email": "johndoe@example.com" } 接着,我们可以使用Vue提供的响应式方法来添加一个对象到数组中: this.us…

    Vue 2023年5月28日
    00
  • Vue import from省略后缀/加载文件夹的方法/实例详解

    Vue import from省略后缀/加载文件夹的方法/实例详解 Vue import from省略后缀 在Vue开发中,使用import语句将其他文件引入到当前文件中时,经常需要写上文件的后缀名。但是有时候我们希望可以省略后缀名,这时只需要在webpack的resolve配置中设置extensions选项即可。 // webpack.config.js …

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