在做数据表格渲染的时候,经常遇到的需求的就是将导出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. windows上搭建NFS服务器及客户端 挂载

    在Windows相关系统上搭建NFS服务及客户端挂载  有两种方式: 第一种: (Windows Server2008R2等类似企业版这样的版本的Server服务上有自带的NFS服务进行搭建) (特别 ...

  2. GMT与UTC简介(转)

    GMT与UTC简介 一.简介 许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time ,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘上密密麻麻的英文 ...

  3. Android 还可以走多久?

    最近,有位知识星球的球友问我这么一个问题: 我做 Android 开发五年多时间了,但是最近总是很焦虑,看着人工智能越来越火,很担心 Android 要不行了,想问下,我现在要转行么?Android ...

  4. 使用 application.properties 中配置的属性,举例:@Value("${server.port}")

    使用 application.properties 中配置的属性:@Value 注解. @RestController public class HelloWorldController { @Val ...

  5. iOS 开发,相关网址

    iOS 开发,相关网址 说明 网址 注册开发者 https://developer.apple.com/cn/programs/enroll/ 未付费688个人开发账号真机调试测试教程 http:// ...

  6. hive中删除表的错误Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException

    hive使用drop table 表名删除表时报错,return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException 刚 ...

  7. hive中的日期转换函数

    1.unix时间戳转时间函数   语法: from_unixtime(bigintunixtime[, string format]) 返回值: string   说明: 转化UNIX时间戳(从197 ...

  8. [Inside HotSpot] Xcode编译调试OpenJDK12

    编译 下载brew然后安装hg,freetype,ccache $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent. ...

  9. 实现:创建/复制/移动文件API

    使用的API: 1.DeleteFile DeleteFileW( _In_ LPCWSTR lpFileName ); 2.CopyFile CopyFileW( _In_ LPCWSTR lpEx ...

  10. log4j.properties的配置信息

    吃了没日志的亏,以前总以为日志没用,以后要重视起来了,很多错误服务器不会显示,但是页面上就是出错,这个时候就要显示日志了. 日志的代码如下,创建日志文件,文件名为log4j.properties,把这 ...