vue---将json导出Excel的方法
在做数据表格渲染的时候,经常遇到的需求的就是将导出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的方法的更多相关文章
- Vue中导出Excel表格方法
本文记录一下在Vue中实现导出Excel表格的做法.参考度娘上各篇博客,最后实现功能 Excel表格,我的后端返回的是数据流,然后文件名是放进了content-disposition中,前端进行获取. ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- ASP.NET导出excel表方法汇总
asp.net里导出excel表方法汇总 1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...
- 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法
在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...
- 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法
之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...
- 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法
由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...
- 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法
懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法 github地址:https://github.com/Jimmey-Jiang/J ...
- java根据xml配置文件导出excel通用方法
java web项目中时常会用到导出功能,而导出excel几乎是每个项目必备的功能之一.针对形形色色的导出方法及个人平时的工作经验,特将导出excel方法整理成通用的方法,根据xml配置来实现特定的导 ...
- vue 纯前端导出 excel 表格
在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...
随机推荐
- 第一册:lesson 133.
原文: Sensational news. question:What reasons did Karen give for a wanting to retire? Have you just m ...
- IDEA 创建类是自动添加注释和创建方法时快速添加注释
1.创建类是自动添加注释 /*** @Author: chiyl* @DateTime: ${DATE} ${TIME}* @Description: TODO*/2. 创建方法时快速添加注释2.1 ...
- 201671010418 刘佳 实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 (1)掌握软件项目评审会流程: (2)反思总结课程学习内容. Start: ...
- Gradle 学习资料
Gradle 学习资料 网址 Gradle 使用指南 http://wiki.jikexueyuan.com/project/gradle/ 寄Android开发Gradle你需要知道的知识 http ...
- wordpress去掉自定义菜单的外层div
wordpress调用自定义菜单时自动会在外层加一个<div class="menu-nav-container">,如下图所示,nav是后台定义的菜单名称,如果想把这 ...
- BZOJ 4411: [Usaco2016 Feb]Load balancing 线段树+二分
code: #include <bits/stdc++.h> #define N 100060 #define M 1000000 #define lson x<<1 #def ...
- TCP三次握手的过程,accept发生在三次握手的哪一个阶段?
答案是:accept过程发生在三次握手之后,三次握手完成后,客户端和服务器就建立了tcp连接并可以进行数据交互了.这时可以调用accept函数获得此连接. TCP Accept总结 TCP Accep ...
- Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系
Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...
- ffmpeg结合SDL编写播放器
创建播放窗口 SDL_Surface *screen = NULL; screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->heig ...
- ImportError: cannot import name 'DjangoSuitConfig'
pip3.6 install https://github.com/darklow/django-suit/tarball/v2