前言:

此前工作中有遇到此需求,也是查看了其他大佬分享的博文,完成了此功能!分享给大家,希望对大家有帮助!若分享有误,欢迎私信 or 评论交流哈~

项目场景:



1.安装:

你需要执行以下几个命令,安装几个包:

npm install -D script-loader
npm install file-saver --save
npm install -S xlsx

命令执行完之后,需要去package.json里面检查一下是否安装成功

2.引入:

main.js里面:

import FileSaver from 'file-saver'
Vue.prototype.FileSaver = FileSaver;


3.使用:

<template><div><v-row class="d-flex justify-center"><v-col cols="6"><p class=" font-weight-bold"><v-btncolor="blue-grey"class="ma-2 white--text"fab@click="export2Excel"width="35px"height="35px"><v-icon dark>mdi-cloud-download</v-icon></v-btn></p><v-data-table:headers="headers":items="tableData":items-per-page="5"class="elevation-1"></v-data-table></v-col></v-row></div>
</template>
<script>
export default {data() {return {headers: [ //存储表头的数据{text: 'Dessert (100g serving)',align: 'start',sortable: false,value: 'name',},{ text: 'Calories', value: 'calories' },{ text: 'Fat (g)', value: 'fat' },{ text: 'Carbs (g)', value: 'carbs' },{ text: 'Protein (g)', value: 'protein' },{ text: 'Iron (%)', value: 'iron' },],tableData: [ //存储表格的数据{name: 'Frozen Yogurt',calories: 159,fat: 6.0,carbs: 24,protein: 4.0,iron: '1%',},{name: 'Ice cream sandwich',calories: 237,fat: 9.0,carbs: 37,protein: 4.3,iron: '1%',},{name: 'Eclair',calories: 262,fat: 16.0,carbs: 23,protein: 6.0,iron: '7%',},{name: 'Cupcake',calories: 305,fat: 3.7,carbs: 67,protein: 4.3,iron: '8%',},{name: 'Gingerbread',calories: 356,fat: 16.0,carbs: 49,protein: 3.9,iron: '16%',},{name: 'Jelly bean',calories: 375,fat: 0.0,carbs: 94,protein: 0.0,iron: '0%',},{name: 'Lollipop',calories: 392,fat: 0.2,carbs: 98,protein: 0,iron: '2%',},{name: 'Honeycomb',calories: 408,fat: 3.2,carbs: 87,protein: 6.5,iron: '45%',},{name: 'Donut',calories: 452,fat: 25.0,carbs: 51,protein: 4.9,iron: '22%',},{name: 'KitKat',calories: 518,fat: 26.0,carbs: 65,protein: 7,iron: '6%',},],};},methods: {//导出excel表格export2Excel(){require.ensure([], () => {let _this = thisconst { export_json_to_excel } = require('@/js/utils/Export2Excel'); //这里的文件,我放在文末了,记得要放入项目中const tHeader = ['calories', 'fat', 'carbs', 'protein', 'iron'];const filterVal = ['calories', 'fat', 'carbs', 'protein', 'iron'];const list = this.tableData;const data = _this.formatJson(filterVal, list);export_json_to_excel(tHeader, data, '列表excel');})},/*** 处理table表格的数据,方便导出excel* @param filterVal* @param jsonData* @returns {*}*/formatJson(filterVal, jsonData) {return jsonData.map(v => filterVal.map(j => v[j]))},},mounted() { },
};
</script>

4.资源文件:

2个本地资源文件,ctrl + A ==> ctrl + C ==> ctrl + V 放到本地项目即可:

文 件 一:Export2Excel.js

//Export2Excel.js
/* eslint-disable */
require('script-loader!file-saver');
require('./Blob.js');//转二进制用  这边要写你的blob的实际地址
require('script-loader!xlsx/dist/xlsx.core.min');function generateArray(table) {var out = [];var rows = table.querySelectorAll('tr');var ranges = [];for (var R = 0; R < rows.length; ++R) {var outRow = [];var row = rows[R];var columns = row.querySelectorAll('td');for (var C = 0; C < columns.length; ++C) {var cell = columns[C];var colspan = cell.getAttribute('colspan');var rowspan = cell.getAttribute('rowspan');var cellValue = cell.innerText;if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;//Skip rangesranges.forEach(function(range) {if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);}});//Handle Row Spanif (rowspan || colspan) {rowspan = rowspan || 1;colspan = colspan || 1;ranges.push({s: {r: R,c: outRow.length},e: {r: R + rowspan - 1,c: outRow.length + colspan - 1}});};//Handle ValueoutRow.push(cellValue !== "" ? cellValue : null);//Handle Colspanif (colspan)for (var k = 0; k < colspan - 1; ++k) outRow.push(null);}out.push(outRow);}return [out, ranges];
};function datenum(v, date1904) {if (date1904) v += 1462;var epoch = Date.parse(v);return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}function sheet_from_array_of_arrays(data, opts) {var ws = {};var range = {s: {c: 10000000,r: 10000000},e: {c: 0,r: 0}};for (var R = 0; R != data.length; ++R) {for (var C = 0; C != data[R].length; ++C) {if (range.s.r > R) range.s.r = R;if (range.s.c > C) range.s.c = C;if (range.e.r < R) range.e.r = R;if (range.e.c < C) range.e.c = C;var cell = {v: data[R][C]};if (cell.v == null) continue;var cell_ref = XLSX.utils.encode_cell({c: C,r: R});if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {cell.t = 'n';cell.z = XLSX.SSF._table[14];cell.v = datenum(cell.v);} else cell.t = 's';ws[cell_ref] = cell;}}if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);return ws;
}function Workbook() {if (!(this instanceof Workbook)) return new Workbook();this.SheetNames = [];this.Sheets = {};
}function s2ab(s) {var buf = new ArrayBuffer(s.length);var view = new Uint8Array(buf);for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;return buf;
}export function export_table_to_excel(id) {var theTable = document.getElementById(id);console.log('a')var oo = generateArray(theTable);var ranges = oo[1];/* original data */var data = oo[0];var ws_name = "SheetJS";console.log(data);var wb = new Workbook(),ws = sheet_from_array_of_arrays(data);/* add ranges to worksheet */// ws['!cols'] = ['apple', 'banan'];ws['!merges'] = ranges;/* add worksheet to workbook */wb.SheetNames.push(ws_name);wb.Sheets[ws_name] = ws;var wbout = XLSX.write(wb, {bookType: 'xlsx',bookSST: false,type: 'binary'});saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
}function formatJson(jsonData) {console.log(jsonData)
}
export function export_json_to_excel(th, jsonData, defaultTitle) {/* original data */var data = jsonData;data.unshift(th);var ws_name = "SheetJS";var wb = new Workbook(),ws = sheet_from_array_of_arrays(data);/* add worksheet to workbook */wb.SheetNames.push(ws_name);wb.Sheets[ws_name] = ws;var wbout = XLSX.write(wb, {bookType: 'xlsx',bookSST: false,type: 'binary'});var title = defaultTitle || '列表'saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
};

文 件 二:Blob.js

/* eslint-disable */
/*  Blob.js* A Blob implementation.* 2014-05-27** By Eli Grey, http://eligrey.com* By Devin Samarin, https://github.com/eboyjr* License: X11/MIT*   See LICENSE.md*//*global self, unescape */
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,plusplus: true *//*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */(function (view) {"use strict";view.URL = view.URL || view.webkitURL;if (view.Blob && view.URL) {try {new Blob;return;} catch (e) {}}// Internally we use a BlobBuilder implementation to base Blob off of// in order to support older browsers that only have BlobBuildervar BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) {varget_class = function(object) {return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];}, FakeBlobBuilder = function BlobBuilder() {this.data = [];}, FakeBlob = function Blob(data, type, encoding) {this.data = data;this.size = data.length;this.type = type;this.encoding = encoding;}, FBB_proto = FakeBlobBuilder.prototype, FB_proto = FakeBlob.prototype, FileReaderSync = view.FileReaderSync, FileException = function(type) {this.code = this[this.name = type];}, file_ex_codes = ("NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR").split(" "), file_ex_code = file_ex_codes.length, real_URL = view.URL || view.webkitURL || view, real_create_object_URL = real_URL.createObjectURL, real_revoke_object_URL = real_URL.revokeObjectURL, URL = real_URL, btoa = view.btoa, atob = view.atob, ArrayBuffer = view.ArrayBuffer, Uint8Array = view.Uint8Array;FakeBlob.fake = FB_proto.fake = true;while (file_ex_code--) {FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;}if (!real_URL.createObjectURL) {URL = view.URL = {};}URL.createObjectURL = function(blob) {vartype = blob.type, data_URI_header;if (type === null) {type = "application/octet-stream";}if (blob instanceof FakeBlob) {data_URI_header = "data:" + type;if (blob.encoding === "base64") {return data_URI_header + ";base64," + blob.data;} else if (blob.encoding === "URI") {return data_URI_header + "," + decodeURIComponent(blob.data);} if (btoa) {return data_URI_header + ";base64," + btoa(blob.data);} else {return data_URI_header + "," + encodeURIComponent(blob.data);}} else if (real_create_object_URL) {return real_create_object_URL.call(real_URL, blob);}};URL.revokeObjectURL = function(object_URL) {if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {real_revoke_object_URL.call(real_URL, object_URL);}};FBB_proto.append = function(data/*, endings*/) {var bb = this.data;// decode data to a binary stringif (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {varstr = "", buf = new Uint8Array(data), i = 0, buf_len = buf.length;for (; i < buf_len; i++) {str += String.fromCharCode(buf[i]);}bb.push(str);} else if (get_class(data) === "Blob" || get_class(data) === "File") {if (FileReaderSync) {var fr = new FileReaderSync;bb.push(fr.readAsBinaryString(data));} else {// async FileReader won't work as BlobBuilder is syncthrow new FileException("NOT_READABLE_ERR");}} else if (data instanceof FakeBlob) {if (data.encoding === "base64" && atob) {bb.push(atob(data.data));} else if (data.encoding === "URI") {bb.push(decodeURIComponent(data.data));} else if (data.encoding === "raw") {bb.push(data.data);}} else {if (typeof data !== "string") {data += ""; // convert unsupported types to strings}// decode UTF-16 to binary stringbb.push(unescape(encodeURIComponent(data)));}};FBB_proto.getBlob = function(type) {if (!arguments.length) {type = null;}return new FakeBlob(this.data.join(""), type, "raw");};FBB_proto.toString = function() {return "[object BlobBuilder]";};FB_proto.slice = function(start, end, type) {var args = arguments.length;if (args < 3) {type = null;}return new FakeBlob(this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding);};FB_proto.toString = function() {return "[object Blob]";};FB_proto.close = function() {this.size = this.data.length = 0;};return FakeBlobBuilder;}(view));view.Blob = function Blob(blobParts, options) {var type = options ? (options.type || "") : "";var builder = new BlobBuilder();if (blobParts) {for (var i = 0, len = blobParts.length; i < len; i++) {builder.append(blobParts[i]);}}return builder.getBlob(type);};
}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));

表格实现excel导出功能相关推荐

  1. java Excel导出功能之 不固定列表格

    背景:考勤周期为本月19号至上月20号,则每个月考勤周期表的列是动态变化的.所有数据显示和excel导出功能都需要动态的进行处理. 显示格式如下图 前端 checkin.jsp<%@ page ...

  2. 根据children动态复杂表头excel导出_Java高级特性-注解:注解实现Excel导出功能

    注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟是框架的事,我们也能用好注解吗? 的确,我们很少有机会自己写注 ...

  3. java数据导出ex_Java高级特性注解:注解实现Excel导出功能

    作者:JerryWu来源:SegmentFault 思否社区 注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟 ...

  4. 简便的Excel导出功能

    Excel导出功能 在我们开发项目的时候,难免会遇到客户需要将表格数据导出到Excel中,进行打印或者留存,于是Java对Excel.word的操作都必不可少. 关于这些操作Excel目前有两个框架, ...

  5. 如何在 Asp.Net Core 实现 Excel 导出功能

    在web应用程序开发时,或许你会遇到这样的需求,如何在 Asp.Net Core 中实现 excel 或者 word 的导入导出,在 NuGet 上有大量的工具包可以实现这样的功能,本篇就讨论下如何使 ...

  6. Angular导出功能(excel导出功能、文件数据流导出功能、图片的下载导出功能)

    Angular导出功能(excel导出功能.文件数据流导出功能.图片的下载导出功能) 场景1:(直接返回网络地址进行导出的excel) 后台返回的是 : "http://192.168.0. ...

  7. Excel导出功能超时解决方案 -- 异步处理

    Excel导出功能超时解决方案 -- 异步处理 参考文章: (1)Excel导出功能超时解决方案 -- 异步处理 (2)https://www.cnblogs.com/nightOfStreet/p/ ...

  8. 解决通过调用后台接口实现Excel导出功能,后台返回数据乱码的问题

    解决通过调用后台接口实现Excel导出功能,后台返回数据乱码的问题 问题如下: 这导致我虽然成功导出文件,但文件受损打不开 解决方案如下: 在调用接口加入: // 导出 export function ...

  9. ThingsBoard CE添加Excel导出功能-优化篇

    文章目录 前言 rpc,static,alarm去掉图例中的启用数据导出选项 效果 前言 如何添加Excel导出功能请跳转上一篇ThingsBoard CE数据导出excel,这篇做优化. 按照Thi ...

最新文章

  1. 面试时与人事交谈时间_如何与您的技术负责人交谈并解决通讯故障
  2. python渲染html页面_从零开始学Python - 第031课:用Python解析HTML页面
  3. html中某个名称不能修改,解决type=file 文件修改表单 名称不能正常回显的问题
  4. php修改音频文件_解析用PHP读写音频文件信息的详解(支持WMA和MP3)
  5. @RequestParam注解详解
  6. 了解一下C++输入和输出的概念
  7. Dubbo思维导图知识点整理
  8. centos7-docker-网络配置
  9. 如何理解和运用策略模式
  10. php获取工作日时间,ThinkPHP中获取指定日期后工作日的具体日期方法
  11. FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,不用第三方SDK,自研推流拉流
  12. Android手机修改wifi图标,安卓手机怎么改wifi密码?
  13. 线性代数学习笔记——第三十三讲——向量混合积的几何意义
  14. Android 智能机顶盒之蓝牙遥控器开机自动配对
  15. /*深度优先建立深林,孩子兄弟法*/
  16. cpu、socket、core、thread 等术语之间的关系
  17. 苹果手机无法验证应用怎么办_苹果关闭iOS 14.0.1验证,用户将无法降级_
  18. 【评测】TaqMan️探针和IDT PrimeTime️ 双淬灭探针的对比
  19. 工业机器人到底涉及了哪些高科技?
  20. 计算机毕业设计java+ssm车辆租赁网站(源码+系统+mysql数据库+Lw文档)

热门文章

  1. 【MSER】基于MSER算法的交通标志分割仿真
  2. UE4打包成APK的详细教程(普通安卓应用,VR全景应用尚在探索中,之后若解决会更新)
  3. 日迹2022.3.22
  4. ed2k解析源码php,Python爬虫:人人影视追剧脚本
  5. 一个算法“拿下”两个榜单!爱奇艺ICCV 2021论文提出人手三维重建新方法
  6. IP协议,ARP协议,RARP协议
  7. Unity纹理优化:缩小包体
  8. 【OpenCV】-霍夫变换
  9. Python调用百度人脸识别API接口检测颜值
  10. 所谓中华文明的传统精髓和不传之秘