第1步:添加依赖:

 1:npm  install  -S file-saver2:npm  install  -S  xlsx3:npm  install  -D script-loader

第2步:
(1)随便写个按钮:

<el-button size="mini" icon="el-icon-download" type="primary" @click="downExcelData()">下载文档</el-button>

(2)在methods方法中:写一个接口方法获取list数据:

    downExcelData() {this.getRequest('/api/getUserList').then(data => {if (data) {this.download(data)}})},download(userData) {this.downloadLoading = trueimport('@/vendor/Export2Excel').then(excel => {const tHeader = ['名称', '账号', '密码']const filterVal = ['name', 'account', 'password']const data = this.formatJson(filterVal, userData)excel.export_json_to_excel({header: tHeader,data,filename: 'room[这里是excel文件名称自己定义]'})this.downloadLoading = false})},formatJson(filterVal, jsonData) {return jsonData.map(v => filterVal.map(j => {console.log(j)if (j === 'createTime') {return parseTime(v[j])} else {return v[j]}}))},

工具类:在src目录创建【/vendor/Export2Excel】js文件,供vue文件引入使用:

require('script-loader!file-saver');
import XLSX from 'xlsx'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);var oo = generateArray(theTable);var ranges = oo[1];/* original data */var data = oo[0];var ws_name = "SheetJS";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")
}export function export_json_to_excel({header,data,filename,autoWidth = true,bookType=  'xlsx'
} = {}) {/* original data */filename = filename || 'excel-list'data = [...data]data.unshift(header);var ws_name = "SheetJS";var wb = new Workbook(),ws = sheet_from_array_of_arrays(data);if (autoWidth) {/*设置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: bookType,bookSST: false,type: 'binary'});saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), `${filename}.${bookType}`);
}

vue 使用Export2Excel导出Excel表格相关推荐

  1. Vue用Export2Excel导出excel,多级表头数据

    VUE 使用Export2Excel导出数据,以及多级表头 最近公司做项目,需要导出数据到excel表格 使用到了 element UI ,Export2Excel 特此记录,毕竟好记性不如烂笔头 不 ...

  2. VUE纯前端导出excel表格功能《转载》

    插件:使用vue-json-excel插件实现Vue纯前端导出简单的Excel表格功能. 使用方法 1. 安装依赖 npm install vue-json-excel 2. 引入组件 a. 全局引入 ...

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

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

  4. vue 使用table2excel导出excel表格(带图片)

    如想要实现导出功能,并且可以导出图片,如下图效果: 下面直接上步骤: Ⅰ  下载安装插件 安装命令:npm install js-table2excel Ⅱ   引入插件 在需要用到的页面引入插件,如 ...

  5. Vue - 调用接口导出 excel 表格至本地

    调用后台接口返回的数据: 代码: // 接口地址 axios.post("/project/download",{type: this.params.type,},{respons ...

  6. vue文件流导出excel表格打不开

    要在post请求拦截器加上responseType = 'arraybuffer',必须设置,也只要设置这个就可以了

  7. vue合并表格excel导出_Vue实现导出excel表格功能

    引言: 最近使用vue在做一个后台系统,技术栈 vue + iView ,在页面中生成表格后, iView可以实现表格的导出,不过只能导出csv格式的,并不适合项目需求. 如果想要导出Excel 在s ...

  8. vue中导出Excel表格

    vue中导出Excel表格 项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体 ...

  9. vue框架使用xlsx导出excel表格

    刚接手一个项目,需要做表格导出,之前没用过,特做此记录,以备下次使用.此模板适用于修改表格样式时使用,若只想简单的直接导出,可以参考另一篇:在vue中,使用xlsx配合FileSaver进行导出exc ...

最新文章

  1. 数字n,按字典排序,找出第k小的数字
  2. 利用python制作漂亮的词云图_利用python制作漂亮的词云图
  3. 使用.NET Core 2.1的Azure WebJobs
  4. 数据结构铁轨问题_每天5分钟用C#学习数据结构(20)图 Part 1
  5. [转载]聊一聊人员培养
  6. pandas object转float_Pandas中文官档~基础用法6
  7. 电商促销海报PSD分层模板,轻松搞定
  8. python爬虫 入门+进阶_python爬虫入门到进阶(三)
  9. linux 适配电脑内核,Linux内核实践 如何添加网络协议[三]:实现 -电脑资料
  10. 前端开源项目周报0418
  11. 怎样做一份良好的竞品分析?通常有哪些方法?
  12. 服务器wifi无线放大器,无线wifi中继放大器的使用方法
  13. Altium Designer 14安装教程(详细版)
  14. python名片系统_初识python-名片管理系统v1.0
  15. PX4模块设计之十二:High Resolution Timer设计
  16. 一般将来时语法课教案_初中英语语法课教案设计
  17. CiscoPacketTracer网络模拟
  18. mysql杀掉sql语句,Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
  19. Java实现电脑屏幕的截取并保存成图片
  20. 五年磨一剑,灵雀云的蜕变

热门文章

  1. linux下apache服务起不来,Linux系统下Apache服务器启动失败的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...
  2. 易语言调用大漠插件剑侠情缘多线程木人巷检测游戏是否开启
  3. html中js隐藏div的高度,jQuery怎么获取隐藏元素的高度?
  4. Java中类数组,创建后使用set函数,报NullPointerException空指针异常
  5. 神经网络结构:生成式对抗网络(GAN)
  6. 用正点原子STM32F103ZET6精英板控制舵机转动实验保姆教程
  7. 流利阅读12.19 Victoria’s Secret gets ready for a makeover
  8. mybatis generator 自动生成代码(带注释的实体类)
  9. 03.freetype显示英文
  10. jquery取消绑定的方法