方法:

// 导出详情数据exportExcel() {const data = {time_type: '',type_id: this.activity_type,activity_id: this.activity_id,start_day: this.formDate.start_time,end_day: this.formDate.start_time};this.$api.analysis.exportDetailData(data).then(res => {var blob = new Blob([res.data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"});var downloadElement = document.createElement("a");var href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = "数据详情列表.xlsx"; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象});}

接口:

//详情/折线图数据导出exportDetailData: params => http({method: 'get',url: 'xxxxxx',//接口地址params: params,responseType: 'blob'})

方法二:Vue 使用 Export2Excel 导出 excel(不使用接口,前端纯导出)

安装依赖

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

 引入所需的 JS 文件: Blob.js和 Export2Excel.js

 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));

Export2Excel.js文件:

/* eslint-disable */
require('script-loader!file-saver');
require('./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);/*******************************表格宽度自适应****************************//*设置worksheet每列的最大宽度*/const colWidth = data.map(row => row.map(val => {/*先判断是否为null/undefined*/if (val == null) {return {'wch': 10};}/*再判断是否为中文*/else if (val.toString().charCodeAt(0) > 255) {return {'wch': val.toString().length * 2};} else {return {'wch': val.toString().length};}}))/*以第一行为初始值*/let result = colWidth[0];for (let i = 1; i < colWidth.length; i++) {for (let j = 0; j < colWidth[i].length; j++) {if (result[j]['wch'] < colWidth[i][j]['wch']) {result[j]['wch'] = colWidth[i][j]['wch'];}}}ws['!cols'] = result;/*******************************表格宽度自适应-结束****************************//* 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")
}

组件中使用:

      <div @click="exportExcel">下载</div>// 导出详情数据exportExcel() {require.ensure([], () => {const {export_json_to_excel} = require('../../utils/Export2Excel');//根据自身项目的创建路径为准const tHeader = [//表头名'活动标题','活动开始时间','活动状态','关联一番赏日历','助力人数','助力有效期','助力成功得赏币数','赏币有效期','创建时间',// '已使用赏币新用户数',// '已使用赏币老用户数',// '参与助力人数',// '参与助力新用户数',// '参与助力老用户数'];const filterVal = [//表头字段'name','activity_time','status','relevance_commodity','help_num','help_time','lottery_fee','valid_time','created_at',// 'use_lottery_fee_new_user_num',// 'use_lottery_fee_old_user_num',// 'participation_help_num',// 'participation_help_new_user_num',// 'participation_help_old_user_num'];const list = this.fissionData; //表格内容const data = this.formatJson(filterVal, list);export_json_to_excel(tHeader, data, '导出的表格名称')})},formatJson(filterVal, tableData) {//用于格式转换直接复制return tableData.map(v => {return filterVal.map(j => {return v[j]})})}

vue项目中,导出下载Excel表格相关推荐

  1. Vue项目中指定区域的表格数据导出为Excel文件

    vue项目中导出excel时有是会需要指定导出的区域如下图 操作部分我们不需要导出只导出表格部分 简记录下实现过程赋代码 一. 安装三个依赖项 npm install -S file-saver np ...

  2. vue项目中实现下载后端返回的excel数据表格

    查看更多资源 1. 案例简介: vue项目中,客户端需要实现以excel表格形式下载数据,后端为java,接受请求 >> 读取数据库 >> 生成excel >> 返 ...

  3. vue+element后台管理系统(下载excel表格)

    标题 vue后台管理系统下载excel表格 1.调用后台接口传入三个参数,url,data参数,第三个参数为一个对象,表格下载返回类型. 2.创建 Blob实列传入后台返回的数据和以对象形式声明类型参 ...

  4. node.js/VUE项目中导出excel表格的多种实现方法(D2admin适用)

    方法一.vue+js-xlsx 1.vue项目内安装两个依赖:xlsx.file-saver  npm install xlsx --save  npm install file-saver --sa ...

  5. 「Vue To Words」 - 教你在Vue项目中导出Word文档(包含表格合并,图片修改大小)

    前言:最近在项目中遇到了,vue页面需要导出word文档,今日就进行记录一下,如有不对的地方,还请见谅 ^^ 简单说一下需求:需要导出的页面是表格页面,因为包含表格的嵌套和合并,其实最主要的就是导出页 ...

  6. 在VUE项目中导出excel——简单使用xlsx

    在大量的项目开发和使用过程中,我们经常会遇到需要将某些数据导出为excel的操作,这里介绍一个很简单的导出方案--xlsx... 插件安装 网络好就直接使用 npm install xlsx -S 网 ...

  7. 关于 vue项目 中实现导入Excel表 + 预览生成的Excel

    项目场景(需求): 1.分步骤填写数据,填写并上传业务Excel表,完成校验,并生成结果 2.生成的结果要和 业务Excel表一致,便于用户比较 3.若未填写正确,则提示用户错误信息,且重新提交 项目 ...

  8. vue项目中的elementui的表格中画甘特图

    最近的项目要求甘特图在elementui中实现,在此做出总结. 性能限制,不能传入太多的数据. 条件(时间):计划开始时间.计划结束时间.开始时间.结束时间.最大时间和最小时间. 思维:渲染表格头.渲 ...

  9. vue项目中打印数据或表格(使用第三方依赖print-js)

    一. 第三方依赖print-js (print-js插件可以打印Html.图片和Json数据类型,下面示例打印的是Json数据类型,其他类型可查看官方文档 ) 资源包文档网址:https://prin ...

最新文章

  1. 负载均衡策略深入剖析
  2. python最新版本-Python 3.8 已发布 现在是切换至新版本的好时机吗?
  3. Linux命令之find的用法
  4. redis线程阻塞原因排插_每次面试都要被问:为什么采用单线程的Redis也会如此之快?...
  5. 浙大 PAT b1017
  6. Kotlin入门(17)等式判断的情况
  7. LeetCode题解——Palindrome Number
  8. 华军java_Java SE Runtime Environment 8
  9. java我的世界混搭包_Minecraft辐射混搭包地图
  10. 6. COM编程——IConnectionPoint和IConnectionPointContainer接口介绍
  11. 财富自由之路-博多费舍尔
  12. java下cmyk图片读取和转换rgb,以及图片压缩
  13. 乞丐的一句话,感动中国13亿人。
  14. 企业微信有定位跟踪吗?企业微信会跟踪员工轨迹记录吗?
  15. C# AHP层次分析法计算特征向量(和法、根法、幂法)
  16. 计算机竞赛奖学金申请书,计算机专业奖学金申请书
  17. educoder_python:6-1-对象第1关:TOM猫原型 类
  18. Android自定义组件之日历控件-精美日历实现(内容、样式可扩展)
  19. php窗帘excel,各种办公室窗帘的用途及优缺点 办公窗帘安装讲
  20. 家装产业的数字化,正在成为越来越多人的新共识

热门文章

  1. 时间复杂度与大O记法的理解
  2. 我的第一份CUDA代码
  3. Cocos Creator游戏开发教程 学习笔记
  4. 基于 ZYNQ 的无线超声数据传输及显示系统的实现
  5. 虚拟机CentOS启动报错-entering emergency mode解决办法
  6. python 数据清洗 豆瓣电影_利用python进行数据清洗和分析
  7. python生成随机的大写字母_Python — 随机生成10个大写、小写字母、特殊字符 string模块...
  8. 传奇单机架设教程,五分钟完成单机架设
  9. Mac OS X pl2303 的驱动下载
  10. 计算机课情感态度与价值观,浅谈信息技术课中情感态度价值观的培养