热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue下载xlsx或xls表格

需求:后台没有提供下载接口,就只能下载插件调用查询接口,把查询出来的数据通过插件生成xlsx或xls表格导出来对应插件:npminstall--savexlsx-style

需求:

后台没有提供下载接口,就只能下载插件调用查询接口,把查询出来的数据通过插件生成xlsx或xls表格导出来

对应插件:

npm install --save xlsx-style

npm install file-saver --save

创建一个文件export2Excel.js

/* eslint-disable */
import { saveAs } from 'file-saver'
import XLSX from 'xlsx-style'function dataNum(v, date1904) {if (date1904) v += 1462const epoch = Date.parse(v)return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000)
}function sheetFromArrayOfArrays(headers, data) {const ws = {}const range = {s: {c: 10000000,r: 10000000},e: {c: 0,r: 0}}/*设置worksheet每列的最大宽度*/for (let R = 0; R !== headers.length; ++R) {for (let C = 0; C !== headers[R].length; ++C) {if (range.s.r > R) range.s.r = Rif (range.s.c > C) range.s.c = Cif (range.e.r R) range.s.r = Rif (range.s.c > C) range.s.c = Cif (range.e.r }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 = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFFreturn buf
}export function sheetMaker({headers = [],data,merges = [],autoWidth = true} = {}) {data = [...data]if (!headers.every(header => header instanceof Array)) {headers = [headers]}const ws = sheetFromArrayOfArrays(headers, data)if (merges.length > 0) {if (!ws['!merges']) ws['!merges'] = []merges.forEach(item => {ws['!merges'].push(XLSX.utils.decode_range(item))})}if (autoWidth) {/*设置worksheet每列的最大宽度*/if (headers.every(header => header instanceof Array)) {for (let i = headers.length - 1; i > -1; i--) {data.unshift(headers[i])}} else {data.unshift(headers)}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 > 150 ? 150 : val.toString().length * 2}} else {return {'wch': val.toString().length > 150 ? 150 : val.toString().length}}}))/*以Header最后一行为初始值*/let result = colWidth[headers.length - 1]for (let i = 1; i }export function json2Excel({ headers, data, keys, filter, sheetName = 'Sheet 1', fileName = 'excel-list', merges = [], autoWidth = true, bookType = 'xlsx' }) {// 数据处理data = data.map(item => keys.map(key => {if (filter && filter instanceof Function) {const value = filter(key, item[key], item)return value == null ? item[key] || '' : value} else {return item[key] == null ? '' : item[key]}}))data = [...data]// 表格对象const wb = new Workbook()const ws = sheetMaker({ headers, data, merges, autoWidth })wb.SheetNames.push(sheetName)wb.Sheets[sheetName] = wsconst wbout = XLSX.write(wb, {bookType: bookType,bookSST: false,type: 'binary'})saveAs(new Blob([s2ab(wbout)], {type: 'application/octet-stream'}), `${fileName}.${bookType}`)
}

页面使用:

html:

导出

 methods:

import { json2Excel } from '@/utils/export2Excel'//js mothds// 导出clickExportSeatBtn() {if (+this.totalCount > 1000) {this.$message.warning('每次最多导出1000条数据')}const exportFilter = (key, keyValue, item) => {if (key === 'userCode') {return item.groupUserCode || item.userCode}if (key === 'landFlag') {return keyValue || '0'}}const fileName = parseTime(new Date(), '{y}{m}{d}{h}{i}{s}')const exportFn = (list) => {json2Excel({data: list,keys: ['seatCode', 'userCode', 'lastLogonTime', 'insertTimeForHis'],headers: [['坐席编码', '用户代码', '最后一次登录时间', '插入时间']],merges: [],filter: exportFilter,fileName: 'SeatMain' + fileName.toString()})}const exportParams = {'currPage': 1,'pageSize': 1000,'currUserCode': this.$store.state.user.info.userCode,}
//调用查询接口seatMainFindSeatMainByPage(exportParams).then(res => {exportFn(res.result instanceof Array ? res.result : [res.result])}).catch(err => {this.$message.error(err)})},

 


推荐阅读
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 在今天的实践中,我深入学习了网页图像抓取技术,通过编写爬虫程序批量获取网站上的图片资源。具体来说,我选择了一个包含大量高质量图片的网站作为练习对象,并成功实现了将这些图片批量下载到本地存储。这一过程不仅提升了我对爬虫技术的理解,还增强了我的编程能力。 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 通过菜单项触发Activity启动过程详解
    本文详细解析了通过菜单项触发Activity启动的过程。在Android开发中,菜单项是用户与应用交互的重要途径之一。文章从技术角度深入探讨了如何通过菜单项触发特定Activity的启动,并提供了具体的代码示例和实现步骤。通过对菜单项的响应处理、Intent的创建与传递等关键环节的分析,帮助开发者更好地理解和掌握这一机制。 ... [详细]
  • 在Java编程中,为了提高代码的可读性和执行效率,建议优先使用局部变量来存储方法的返回值,而不是多次调用同一个方法。这样不仅可以减少方法调用的开销,还能避免潜在的性能问题。此外,使用局部变量还可以增强代码的可维护性和调试便利性。 ... [详细]
  • 深入解析 UIImageView 与 UIImage 的关键细节与应用技巧
    本文深入探讨了 UIImageView 和 UIImage 的核心特性及应用技巧。首先,详细介绍了如何在 UIImageView 中实现动画效果,包括创建和配置 UIImageView 实例的具体步骤。此外,还探讨了 UIImage 的加载方式及其对性能的影响,提供了优化图像显示和内存管理的有效方法。通过实例代码和实际应用场景,帮助开发者更好地理解和掌握这两个重要类的使用技巧。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • Java 中 ZonedDateTime 类的天数方法详解及示例代码 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
author-avatar
谭小牙笑不漏齿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有