在做数据表格渲染的时候,经常遇到的需求的就是将导出excel,下面是使用vue进行项目数据进行导出的方法。

一、安装依赖

npm i -S file-saver
npm i -S xlsx

二、在src目录下新建utilsl文件夹,新建json2excel.js,并引入依赖

import { saveAs } from 'file-saver'
import XLSX from 'xlsx/dist/xlsx.full.min' // 将json数据处理为xlsx需要的格式
function datenum(v, date1904) {
if (date1904) v +=
let epoch = Date.parse(v)
return (epoch - new Date(Date.UTC(, , ))) / ( * * * )
} function data2ws(data) {
const ws = {}
const range = {s: {c: , r: }, e: {c: , r: }}
for (let R = ; R != data.length; ++R) {
for (let C = ; 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
const cell = { v: data[R][C] }
if (cell.v == null) continue
const 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[]
cell.v = datenum(cell.v)
}
else cell.t = 's' ws[cell_ref] = cell
}
}
if (range.s.c < ) ws['!ref'] = XLSX.utils.encode_range(range)
return ws
}
// 导出Excel
function Workbook() {
if (!(this instanceof Workbook)) return new Workbook()
this.SheetNames = []
this.Sheets = {}
} function s2ab(s) {
const buf = new ArrayBuffer(s.length)
const view = new Uint8Array(buf)
for (let i = ; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF
return buf
} /*
* th => 表头
* data => 数据
* fileName => 文件名
* fileType => 文件类型
* sheetName => sheet页名
*/
export default function toExcel ({th, data, fileName, fileType, sheetName}) {
data.unshift(th)
const wb = new Workbook(), ws = data2ws(data)
sheetName = sheetName || 'sheet1'
wb.SheetNames.push(sheetName)
wb.Sheets[sheetName] = ws
fileType = fileType || 'xlsx'
var wbout = XLSX.write(wb, {bookType: fileType, bookSST: false, type: 'binary'})
fileName = fileName || '列表'
saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), `${fileName}.${fileType}`)
}

具体使用:

第一种方式:组件引入

<template>
<div style="padding:40px;">
<el-button type="primary" size="small" @click="downExcel">导出EXCEL</el-button>
</div>
</template> <script>
import toExcel from '@/utils/json2excel'
export default {
name: "landing-page",
data() {
return {
excelData: [
{name: '张三',birthday: new Date('1990-01-01'),sex: '男',age: 28},
{name: '李四',birthday: new Date('1991-01-01'),sex: '女',age: 27}
]
};
},
mounted() {},
methods: {
downExcel() {
const th = ['姓名', '生日', '性别', '年龄']
const filterVal = ['name', 'birthday', 'sex', 'age']
const data = this.excelData.map(v => filterVal.map(k => v[k]))
const [fileName, fileType, sheetName] = ['测试下载', 'xlsx', '测试页']
toExcel({th, data, fileName, fileType, sheetName})
}
}
};
</script>

第二种:全局挂载使用

1、在main.js中全局挂载toExcel方法

import toExcel from '@/excel/json2excel'
Vue.prototype.$toExcel = toExcel

2、在组件中调用toExcel方法导出excel

<template>
<div style="padding:40px;">
<el-button type="primary" size="small" @click="downExcel">导出EXCEL</el-button>
</div>
</template> <script>
import toExcel from '@/utils/json2excel'
export default {
name: "landing-page",
data() {
return {
excelData: [
{name: '张三',birthday: new Date('1990-01-01'),sex: '男',age: 28},
{name: '李四',birthday: new Date('1991-01-01'),sex: '女',age: 27}
]
};
},
mounted() {},
methods: {
downExcel() {
const th = ['姓名', '生日', '性别', '年龄']
const filterVal = ['name', 'birthday', 'sex', 'age']
const data = this.excelData.map(v => filterVal.map(k => v[k]))
const [fileName, fileType, sheetName] = ['测试下载', 'xlsx', '测试页']
this.$toExcel({th, data, fileName, fileType, sheetName})
}
}
};
</script>

技术支持:昆明猫咪科技

vue---将json导出Excel的方法的更多相关文章

  1. Vue中导出Excel表格方法

    本文记录一下在Vue中实现导出Excel表格的做法.参考度娘上各篇博客,最后实现功能 Excel表格,我的后端返回的是数据流,然后文件名是放进了content-disposition中,前端进行获取. ...

  2. asp.net中导出Excel的方法

    一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

  3. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  4. 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法

    在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...

  5. 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法

    之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...

  6. 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法

    由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...

  7. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  8. java根据xml配置文件导出excel通用方法

    java web项目中时常会用到导出功能,而导出excel几乎是每个项目必备的功能之一.针对形形色色的导出方法及个人平时的工作经验,特将导出excel方法整理成通用的方法,根据xml配置来实现特定的导 ...

  9. vue 纯前端导出 excel 表格

    在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...

随机推荐

  1. 【Spring Cloud】Spring Cloud之Spring Cloud Sleuth,分布式服务跟踪(1)

    一.Spring Cloud Sleuth组件的作用 为微服务架构增加分布式服务跟踪的能力,对于每个请求,进行全链路调用的跟踪,可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等. 二 ...

  2. 为什么使用正则RegExp.test( )方法时第一次是 true,第二次是false?

    今天朋友问我一个问题,我现在需要多次匹配同一个内容,但是为什么我第一次匹配,直接是 true,而第二次匹配确实 false 呢? var s1 = "MRLP"; var s2 = ...

  3. P5021 赛道修建[贪心+二分]

    题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 mm 条赛道. C 城一共有 nn 个路口,这些路口编号为 1,2,-,n1,2,-,n,有 n-1n−1 条适合于修建赛道的双向通 ...

  4. python小案例-计算输入两个数的最大公约数与最小公倍数

    # 计算最大公约数 def gcd(x,y): """ 计算最大公约数 :param x:一个正整数 :param y:一个正整数 :return:x,y的最大公约数 & ...

  5. python应用-解决现实应用题

    公鸡5元1只,母鸡3元1只,小鸡一元3只,100元买100只鸡,三种鸡各多少只 x+y+z=100 5*x+3*y+z//3=100 z%3==0 穷举法-穷尽所有的可能性找到真正的答案 for x ...

  6. c语言位域的使用注意事项——数据溢出

    c语言可以使用位域来节省变量的空间,例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.位域的取值范围非常有限,数据稍微大些就会发生溢出,这个字使用keil的使用,keil提 ...

  7. iOS 应用逆向工程分析流程图

    http://bbs.iosre.com/t/ios/12432

  8. k-mean

    import numpy as np from k_initialize_cluster import k_init np.random.seed() class YOLO_Kmeans: def _ ...

  9. 监听localStorage中的数据变化

    问题描述:我们在js里面获取了某一个localstorage的值,但是后期它可能改变了,我们js只执行一遍没办法再次获取它的值,当然可以刷新页面获取,但如果是我们的但页面就不能刷新页面了,此时:我们可 ...

  10. three.js 加载3DS 404 文件找不到

    web.config修改如下: code: <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配 ...