返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue前端导出Excel文件的详细实现方案
  • 767
分享到

Vue前端导出Excel文件的详细实现方案

2024-04-02 19:04:59 767人浏览 薄情痞子
摘要

目录一、技术选型 二、技术实现 使用 Vue-JSON-excel 插件实现1.安装 vue-json-excel 依赖 2.注册插件到 vue 实例 3.使用方式 基于 sheet

一、技术选型

1.使用 vue-json-excel 插件实现

优点:简单便捷,易上手,开箱即用;

缺点:不支持 excel 表格样式设置,且支持功能比较单一;

2.基于 sheetJS-xlsx 解析器的 xlsx-style 实现(推荐)

优点:支持格式众多,支持 excel 表格样式设置,功能强大,可控性高,可读取和导出excel;

缺点:使用较为复杂,上手成本较大,且高级功能需要收费,但该功能可以借助 xlsx-style 实现;

二、技术实现

使用 vue-json-excel 插件实现

1.安装 vue-json-excel 依赖


npm install -S vue-json-excel

2.注册插件到 vue 实例


import Vue from "vue";
import JsonExcel from "vue-json-excel";

Vue.component("downloadExcel", JsonExcel);

3.使用方式

在需要触发导出事件的外出包裹 download-excel 组件

该组件支持的属性可参考vue-json-excel 的 GitHub 文档


<download-excel :data="json_data">
  Download Data
  <img src="download_icon.png" />
</download-excel>

首先需要处理导出到 excel 文件的数据内容,分别是以下数据:

  • 表头名数据 json_fields:可以选择要导出的字段,并为字段分配标签。该数据类型为 Object ,key 对应的是标签,value 对应的是 JSON 字段,将导出与数据列表相同字段的数据。如果需要自定义导出的数据,可以定义回调函数。
  • 表格数据 json_data:该数据类型为 Array,存储了需要导出的数据内容;

let json_fields = {
  // fieldLabel(表头名),attributeName(对应字段名)
  fieldLabel: attributeName,
  // 使用回调自定义导出数据
  anotherFieldLabel: {
    field: anotherAttributeName,
    callback: (value) => {
      return `fORMatted value ${value}`;
    },
  },
};

let json_data = [
    {
        attributeName: value1,
        anotherAttributeName: value2
    },
    {
        attributeName: value3,
        anotherAttributeName: value4
    }
];

处理完数据之后则可以将数据传入 download-excel 组件中,该组件没有任何样式,只需要设置内部包裹的元素样式即可;


<download-excel
  class="btn btn-default"
  :data="json_data"
  :fields="json_fields"
  worksheet="My Worksheet"
  name="filename.xls"
>
  Download Excel (you can customize this with html code!)
</download-excel>

然而在实际的业务场景下,导出表格数据通常是导出表格的所有数据,所以在导出的过程中,需要调用请求接口去获取表格中的所有数据,而调用接口获取数据是异步执行的过程,该插件也针对这个场景提供了解决方案。

相关案例:


<template>
    <div id="app">
        <downloadexcel
            class            = "btn"
            :fetch           = "fetchData"
            :fields          = "json_fields"
            :before-generate = "startDownload"
            :before-finish   = "finishDownload">
            Download Excel
        </downloadexcel>
    </div>
</template>

<script>
import downloadexcel from "vue-json-excel";
import axiOS from 'axios';

export default {
    name: "App",
    components: {
        downloadexcel,
    },
    data(){
        return {
            json_fields: {
                'Complete name': 'name',
                'Date': 'date',
            },
        }
    }, //data
    methods:{
        async fetchData(){
            const response = await axios.get(URL);
            return response.data.holidays;
        },
        startDownload(){
            alert('show loading');
        },
        finishDownload(){
            alert('hide loading');
        }
    }
};
</script>

基于 sheetJS-xlsx 解析器的 xlsx-style 实现(推荐)

由于这部分涉及内容较多,后续有需要会封装该功能

这里只对封装的 export2Excel 使用方法进行说明,暂时不对原理进行讲解。

该插件不仅支持 excel 文件的导出,也支持文件导入功能,并且导出 excel 文件的不仅支持 json 数据,也支持 table 导出;

由于 sheetjs-xlsx 提供的工具库其高级功能是付费项目,如修改表格样式等功能,因此选用了基于 sheetjs-xlsx 实现的 xlsx-style 插件。

兼容性:

1.安装依赖


npm install -S xlsx
npm install -S xlsx-style

而 xlsx-style 插件在使用的时候会报错,官方也对该问题给出了解决方案,就是在根目录下的vue.config.js配置文件添加如下代码:


module.exports = {
	configurewebpack: {
    	externals: {
      		'./cptable': 'var cptable'
    	}
  	}
}

还有一种方案是改源代码,但不推荐使用,就不做说明了。

2.使用方法

这里封装了导出 excel 文件的方法,其中,文件下载的功能有两个方案实现,分别是:

  • 通过 a 标签的文件下载功能,利用 URL.createObjectURL 方法生成下载链接实现;(本文使用的方法)
  • 通过第三方插件 file-saver 插件实现文件下载功能;

js-xlsx 插件自带了相关的函数去方便实现不同数据格式的转换:

  • aoa_to_sheet converts an array of arrays of JS data to a worksheet.
  • json_to_sheet converts an array of JS objects to a worksheet.
  • table_to_sheet converts a DOM TABLE element to a worksheet.
  • sheet_add_aoa adds an array of arrays of JS data to an existing worksheet.
  • sheet_add_json adds an array of JS objects to an existing worksheet.

下面是封装的 export2Excel 函数具体代码,只需要将代码复制到创建的 export2Excel.js 文件中即可:




import * as styleXLSX from 'xlsx-style'


function s2ab (s) {
    let buf = null;

    if (typeof ArrayBuffer !== 'undefined') {
        buf = new ArrayBuffer(s.length);
        let view = new Uint8Array(buf);

        for (let i = 0; i != s.length; ++i) {
            view[i] = s.charCodeAt(i) & 0xFF;
        }

        return buf;
    }

    buf = new Array(s.length);

    for (let i = 0; i != s.length; ++i) {

        // 转换成二进制流
        buf[i] = s.charCodeAt(i) & 0xFF;
    }

    return buf;
}

 
function saveAs (obj, fileName) {
    let aLink = document.createElement("a");

    if (typeof obj == 'object' && obj instanceof Blob) {
        aLink.href = URL.createObjectURL(obj); // 创建blob地址
    }
    
    aLink.download = fileName;
    aLink.click();
    setTimeout(function () {
        URL.revokeObjectURL(obj);
    }, 100);
}


export default function export2Excel ({
    worksheets, 
    fileName = 'ExcelFile',
    type = 'xlsx'
} = {}) {

    let sheetNames = Object.keys(worksheets);
    let workbook = {
        SheetNames: sheetNames, //保存的工作表名
        Sheets: worksheets
    };

    // excel的配置项
    let wopts = {  
        bookType: type,  // 生成的文件类型
        bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
        type: 'binary'  
    }

    // attempts to write the workbook
    let wbout = styleXLSX.write(workbook, wopts);
    let wbBlob = new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
    });

    saveAs(wbBlob, fileName + '.' + type);
}

需要注意几个问题:

  1. xlsx 和 xlsx-style 的默认导出函数名都是 XLSX ,如果同时导入的话,需要注意设置别名,避免函数覆盖出现问题;
  2. 如果不想使用 xlsx 插件,只使用 xlsx-style 插件同样也是可以的,只是要自己将需要导出的数据转换成 worksheet 格式对象,其原理也就是将导出数据转换成 worksheet 规定的数据格式,具体可以查看js-xlsx 文档说明;(可以自己尝试实现)

然后只需要在需要导出 excel 的地方调用即可,如果对导出表格样式有要求的情况下,可以去了解如何配置表格样式,具体配置方法可以去xlsx-style 文档 中查看。

如果是 json 数据导出,需要对表头名和字段进行映射;

相关案例:


import XLSX from 'xlsx';
import export2Excel from '@/assets/utils/export2Excel';

// json 格式
let jsonTable = [{
    "sheet1id": 1,
    "表头1": "数据11",
    "表头2": "数据12",
    "表头3": "数据13",
    "表头4": "数据14"
}, {
    "sheet1id": 2, 
    "表头1": "数据21",
    "表头2": "数据22",
    "表头3": "数据23",
    "表头4": "数据24"
}];

// 二维数组格式
let aoa = [
    ['sheet2id', '表头1', '表头2', '表头3', '表头4'],
    [1, '数据11', '数据12', '数据13', '数据14'],
    [2, '数据21', '数据22', '数据23', '数据24']
]

function handleExportExcel () {
    
    // 使用 XLSX 内置的工具库将 json 转换成 sheet
    let worksheet1 = XLSX.utils.json_to_sheet(jsonTable);

    // 使用 XLSX 内置的工具库将 aoa 转换成 sheet
    let worksheet2 = XLSX.utils.aoa_to_sheet(aoa);

    // 设置 excel 表格样式
    worksheet1["B1"].s = { 
        font: { 
            sz: 14, 
            bold: true, 
            color: { 
                rgb: "FFFFAA00"
            } 
        }, 
        fill: { 
            bGColor: { 
                indexed: 64 
            }, 
            fgColor: { 
                rgb: "FFFF00" 
            } 
        } 
    };

    // 单元格合并
    worksheet1["!merges"] = [{
        s: { c: 1, r: 0 },
        e: { c: 4, r: 0 }
    }];

    export2Excel({
        worksheets: {
            sheet1: worksheet1,
            sheet2: worksheet2
        }, // 导出excel的数据,key表示工作表名,value表示对应工作表的 sheet 数据,支持导出多个工作表
        fileName: '我的excel', // 导出文件名
        type: 'xlsx' // 文件导出类型
    });
}

三、参考资料

  • vue-json-excel插件文档
  • sheetjs-xlsx工具库
  • xlsx-style工具库

总结

到此这篇关于Vue前端导出Excel文件的文章就介绍到这了,更多相关Vue导出Excel文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue前端导出Excel文件的详细实现方案

本文链接: https://lsjlt.com/news/135014.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue前端导出Excel文件的详细实现方案
    目录一、技术选型 二、技术实现 使用 vue-json-excel 插件实现1.安装 vue-json-excel 依赖 2.注册插件到 vue 实例 3.使用方式 基于 sheet...
    99+
    2024-04-02
  • Vue前端导出后端返回的excel文件方式
    目录前端导出后端返回的excel文件处理文件的下载(后端Excel导出)后端文件流通过 Blob 下载拼接 URL 下载前端导出后端返回的excel文件 在网上搜索了一番之后,决定采...
    99+
    2024-04-02
  • Vue前端表格导出Excel文件的图文教程
    目录前言一、实现1. 页面2.代码2.1 核心方法2.2 调用方法结束前言 分享一个Vue前端导出Excel文件的方法。记录学习! 功能需求:将表格的全部数据导出Excel格式的文件...
    99+
    2023-05-17
    vue前端表格导出 vue导出 vue 导出excel
  • React.js前端导出Excel的方式
    目录前言实现方式csv 与 Excel 的区别react-csvxlsxcdn 方式在 react 中使用json 转 excel结语前言 前段时间,项目上有个需求需要将数据报表导出...
    99+
    2024-04-02
  • vue导出word纯前端的实现方式
    vue导出word纯前端实现 最近项目有个需求导出word,纯前端实现,查了查资料,用docxtemplater简直不要太简单。 直接把官网例子拿过来就可以了。!!! 官网地址 首先...
    99+
    2024-04-02
  • React实现导入导出Excel文件
    目录表示层 业务层 核心插件xlsx excel 导入 excel 导出 excel 导出插件(js-export-excel) 实现效果结语 表示层 这里我是使用的是antd的U...
    99+
    2024-04-02
  • JavaScript实现excel文件导入导出
    目录一、需求场景描述1.此时前端上传解析excel文件可能更合适2.此时前端下载excel文件可能优雅一些二、实现思路分析1.导入excel文件实现思路分析2.导出excel文件实现...
    99+
    2024-04-02
  • java中的export方法实现导出excel文件
    目录1.export函数2.导出列名3.export实现方法4.前端对接5.前端代码1.export函数 //导出文件接口 public String export(){ retur...
    99+
    2024-04-02
  • Springboot导出文件,前端下载文件方式
    Springboot导出文件,前端下载文件 后端代码 可以把请求设置为post,我这里是Get @RequestMapping(value = "/download", met...
    99+
    2024-04-02
  • vue如何实现二进制流文件导出excel
    目录vue二进制流文件导出excel前端代码后端node关于二进制文件流导出Excel文件的一些坑实现下载效果踩坑vue二进制流文件导出excel 问了一下其他的后端,他们公司前端是...
    99+
    2024-04-02
  • vue怎么实现二进制流文件导出excel
    本篇内容主要讲解“vue怎么实现二进制流文件导出excel”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现二进制流文件导出excel”吧!vue二进制流文件导出excel问了一下其他...
    99+
    2023-06-30
  • javascript 实现纯前端将数据导出excel两种方式
    目录前言方法一方法二前言 修改之前项目代码的时候,发现前人导出excel是用纯javascript实现的。并没有调用后台接口。 之前从来没这么用过,记录一下。以备不时之需。 方法一 ...
    99+
    2024-04-02
  • 前端使用xlsx库导出带有样式的excel文件
    目录需求分析常用的库ExcleJS具体实现结果展示整个函数展示最后需求分析 最近遇到一个需求:前端导出excel文件,其中有部分数据用户不能操作,部分列数据可以筛选,并且存在前一列的...
    99+
    2022-11-13
    前端xlsx库导出excel xlsx导出excel
  • vue导出excel表格的新手详细教程
    目录前言一、安装vue-json-excel二、main.js中引入三、在代码中使用四、数据五、效果六、一些常用参数总结前言 在开发的时候,会经常用的导出excel表格功能,刚好自己...
    99+
    2024-04-02
  • 如何使用vue实现前端导入excel数据
    目录前言一、主界面先引入导入组件二、封装excel-import组件1.首先是template代码(这里用的是ant vue desgin框架的组件)2.引入接口3.js代码meth...
    99+
    2023-05-17
    vue前端导入excel文件 vue导入excel并预览 前端导入excel文件
  • EasyExcel实现Excel文件导入导出功能
    一、EasyExcel简介 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的fu...
    99+
    2023-09-15
    excel java Powered by 金山文档
  • React怎么实现导入导出Excel文件
    这篇文章主要介绍“React怎么实现导入导出Excel文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React怎么实现导入导出Excel文件”文章能帮助大家解决问题。表示层这里我是使用的是ant...
    99+
    2023-06-05
  • javascript怎么实现纯前端将数据导出excel
    这篇文章主要介绍了javascript怎么实现纯前端将数据导出excel的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript怎么实现纯前端将数据导出excel文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-02
  • 详解如何实现在Vue中导入Excel文件
    目录一、安装依赖二、template中三、script中js代码以将此Excel导出为json数据为例 一、安装依赖 npm install file-saver --save n...
    99+
    2024-04-02
  • 利用PHPExcel导出excel文件的方法详解
    最近工作中需要用到phpexcel导出excel表格。自动存储在固定位置。 之前导出excel使用header原生导出。 但是这种方法,我没有找到可以自动存储的功能。 如果你知道,请...
    99+
    2022-11-13
    PHPExcel导出excel文件 PHPExcel导出excel PHP 导出excel文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作