位置: IT常识 - 正文

vue框架使用xlsx导出excel表格(vue框架教程视频)

编辑:rootadmin
vue框架使用xlsx导出excel表格

推荐整理分享vue框架使用xlsx导出excel表格(vue框架教程视频),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue框架教程视频,vue框架教程视频,vue-xlsx,vue框架用什么软件写,vue框架教程视频,Vue框架使用session怎么用,Vue框架使用了MVC设计模式,Vue框架使用了MVC设计模式,内容如对您有帮助,希望把文章链接给更多的朋友!

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

看到一篇文章,受益匪浅:如何使用JavaScript实现纯前端读取和导出excel文件-好记的博客

此项目中的表格数据 使用的是element ui 中的table 导入的,所以导出也是直接将已生成的表格导出为excel

表格导出的基本模板过程

1. 先下载插件

npm i xlsxnpm i xlsx-style

2. 在使用的页面中导入

import XLSX2 from 'xlsx'import XLSX from 'xlsx-style'

3. 绑定要导出的表格,并设置列宽(不同内容的导出方式是不同的,这里直接是将表格导出为excel文件,用的是 utils.table_to_sheet,其他的用到了再补充)

这里对表格有无数据的判断,请看下边遇到的问题第三个来写!!!

var wb = XLSX2.utils.table_to_sheet(document.querySelector('#mytable'))// mytable为表格的id名 if (!wb['!merges']) { this.$message.warning('无法导出:报表无数据') return } // 设置列宽(这里用到列的数量是用来设置不同列的不同宽度的) const sum = 1 + this.govMt.length * 7 + 2 // 列的数量,根据自身项目进行数据的更改 for (var i = 0; i < sum; i++) { if (i === sum - 1) { wb['!cols'][i] = { wpx: 120 } // 设置列宽,只有最后一列的宽度是不同的 } else { wb['!cols'][i] = { wpx: 60 } } }

4. 设置单元格的样式

for (const key in wb) { if (key.indexOf('!') === -1) { // 排除带!的字段,只要单元格字段 wb[key].s = { font: {// 字体设置 sz: 13, bold: false, color: { rgb: '000000'// 十六进制,不带# } }, border: { // 设置边框 top: { style: 'thin' }, bottom: { style: 'thin' }, left: { style: 'thin' }, right: { style: 'thin' } }, alignment: {// 文字居中 //字体水平居中、垂直居中、自动换行 horizontal: 'center', vertical: 'center', wrap_text: true } } } }

基础设置就是这样, 然后调用后边的三个函数即可

var data = this.addRangeBorder(wb['!merges'], wb) // 合并项添加边框var filedata = this.sheet2blob(data) // 将一个sheet转成最终的excel文件的blob对象this.openDownloadDialog(filedata, '报表名字.xlsx') // 下载报表

5. 由于有合并的单元格,所以要为 合并项 添加边框,具体解释看文末遇到的问题中的四!!

// 为合并项添加边框 addRangeBorder(range, ws) { const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] range.forEach(item => { const startColNumber = Number(item.s.r); const endColNumber = Number(item.e.r) // 0-0 const startRowNumber = Number(item.s.c); const endRowNumber = Number(item.e.c) // 0-16 const test = ws[arr[startRowNumber] + (startColNumber + 1)] // 合并项第一个单元格中的内容 for (let col = startColNumber; col <= endColNumber; col++) { // 0-0 for (let row = startRowNumber; row <= endRowNumber; row++) { // 0-16 ws[arr[row] + (col + 1)] = test // A1-P1 } } }) return ws },

6. 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载

// 将一个sheet转成最终的excel文件的blob对象sheet2blob(sheet, sheetName) { // console.log(sheet, sheetName, 'sheet, sheetName') sheetName = sheetName || 'sheet1' console.log(sheetName, 'sheetName') var workbook = { SheetNames: [sheetName], Sheets: {} } workbook.Sheets[sheetName] = sheet // 生成excel的配置项 var wopts = { bookType: 'xlsx', // 要生成的文件类型 bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性 type: 'binary' } var wbout = XLSX.write(workbook, wopts) var blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' }) // 字符串转ArrayBuffer 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 } return blob },

利用URL.createObjectURL下载 函数

openDownloadDialog(url, saveName) { if (typeof url === 'object' && url instanceof Blob) { url = URL.createObjectURL(url) // 创建blob地址 } var aLink = document.createElement('a') aLink.href = url aLink.download = saveName || '' // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效 var event if (window.MouseEvent) event = new MouseEvent('click') else { event = document.createEvent('MouseEvents') event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) } aLink.dispatchEvent(event) }遇到的问题: 一、在使用xlsx-style导出的时候,可能会报如下错误:Can‘t resolve ‘./cptable‘ in ‘xxx\node_modules_xlsx\xxx

或者在npm run serve时出现:

This relative module was not found:  * ./cptable in ./node_modules/xlsx-style/dist/cpexcel.js

解决方式有两种:

1. 在config.js中加入如下代码:

module.exports = {externals: { './cptable': 'var cptable' }}

这段代码要写进config.js中,我发现我并没有这个文件(我用的是vue2.0),所以要在根目录中创建vue.config.js文件,并在内部写如下代码:

module.exports = { devServer: { port: 80, host: '0.0.0.0', },};vue框架使用xlsx导出excel表格(vue框架教程视频)

这时,我将externals: { './cptable': 'var cptable' }直接写进 module.exports 中,

module.exports = { devServer: { port: 80, host: '0.0.0.0', }, externals: { './cptable': 'var cptable' }};

 出现了如下错误:

ERROR  Invalid optio

.0ns in vue.config.js: "externals" is not allowed

意思是vue.config.js里面没有这个字段,所以配置的这个webpack字段vue并没有把它映射到vue.config.js中。所以我们要换一种引用方式:

configureWebpack: { externals: {'./cptable': 'var cptable'} } // 配置webpack的字段。

然后再重新运行就可以了。

2. 第二种方式是修改 node_modules 中的代码,但是,每次拉取代码 npm i 后,都要去修改,这样是很不方便的。

  找到 ./node_modules/xlsx-style/dist/cpexcel.js 文件手动修改

将var cpt = require('./cpt' + 'able'); 替换为var cpt = cptable; 二、vue xlsx导出表格时间不全问题

可能为:进入时间一列显示年月日,时分秒被忽略掉、有个别显示####

 解决方式:

在代码中添加:{ raw: true }

var wb = XLSX2.utils.table_to_sheet(document.querySelector('#exportTab'), { raw: true })// exportTab为表格的id名

效果图:

三、在代码的 3. 中,报表无数据的判断是可以灵活改变的

如下代码段是用来判断有没有合并项的,如果没有单元格合并,是不会有此选项的,所以就算表格中有数据,也会一直走无法导出的代码,所以可以再从wb中换一个字段来判断。例如: !fullref

若有合并项可以写为:

if (!wb['!merges']) { this.$message.warning('无法导出:报表无数据') return }

根据需要可以改写为:

if (!wb['!fullref']) { this.$message.warning('无法导出:报表无数据') return }四、 对于合并项函数的需求解答

当我们的单元格是合并单元格时,如果不对合并项添加边框,导出的表格效果如图所示:

我们发现合并项的边框是有缺失的,在我们调用为合并项添加边框函数后,就可解决这个问题,效果图如下所示:

 

本文链接地址:https://www.jiuchutong.com/zhishi/297463.html 转载请保留说明!

上一篇:CSDN芒果独家原创YOLOv5改进、YOLOv7改进(适用YOLOv8改进)专栏 | 《芒果YOLO改进系列进阶指南》来自人工智能专家老师联袂推荐(芒果sdk)

下一篇:vue2和vue3区别(vue2和vue3区别面试题)

  • 库乐队下载不了怎么办(为什么苹果库乐队下载不了)

    库乐队下载不了怎么办(为什么苹果库乐队下载不了)

  • 分组交换的特点(计算机网络分组交换的特点)

    分组交换的特点(计算机网络分组交换的特点)

  • 电脑突然白屏了按哪个键可以修复(电脑突然白屏了是什么意思)

    电脑突然白屏了按哪个键可以修复(电脑突然白屏了是什么意思)

  • 表格怎么合计总数(表格怎么合计总数的公式)

    表格怎么合计总数(表格怎么合计总数的公式)

  • 华为p30自带的膜要撕掉吗(华为p30自带膜怎么撕)

    华为p30自带的膜要撕掉吗(华为p30自带膜怎么撕)

  • 计算器的开机键是什么字母(计算器的开机键为什么)

    计算器的开机键是什么字母(计算器的开机键为什么)

  • 华为手机鼓起来了但可以正常使用(华为手机鼓起来了能更换电池吗)

    华为手机鼓起来了但可以正常使用(华为手机鼓起来了能更换电池吗)

  • 同时删除漫游聊天记录是什么意思(删除漫游聊天记录是什么意思)

    同时删除漫游聊天记录是什么意思(删除漫游聊天记录是什么意思)

  • 华为荣耀9x是不是5g手机(华为荣耀9x是不是防水的)

    华为荣耀9x是不是5g手机(华为荣耀9x是不是防水的)

  • 青轴和茶轴的区别(青轴和茶轴的手感)

    青轴和茶轴的区别(青轴和茶轴的手感)

  • 爱奇艺怎么设置高清播放(爱奇艺怎么设置跳过开头和结尾)

    爱奇艺怎么设置高清播放(爱奇艺怎么设置跳过开头和结尾)

  • 鼠标上的按键是什么(鼠标上的按键是空格怎么设置)

    鼠标上的按键是什么(鼠标上的按键是空格怎么设置)

  • 华为手机能用荣耀手环么(华为手机能用荣耀充电器吗)

    华为手机能用荣耀手环么(华为手机能用荣耀充电器吗)

  • 流量gb大还是g大(一个g的流量是多少兆)

    流量gb大还是g大(一个g的流量是多少兆)

  • 华为p30支持双微信吗(华为p30支持双频wifi吗)

    华为p30支持双微信吗(华为p30支持双频wifi吗)

  • 饿了么发票信息在哪里(饿了么发票信息怎么修改)

    饿了么发票信息在哪里(饿了么发票信息怎么修改)

  • 抖音怎么拍自己的原声视频(抖音怎么拍自己的原声带伴奏)

    抖音怎么拍自己的原声视频(抖音怎么拍自己的原声带伴奏)

  • 淘宝怎么解除保护模式(淘宝怎么解除保证金)

    淘宝怎么解除保护模式(淘宝怎么解除保证金)

  • exb文件手机怎么打开(exb格式手机用什么软件打开)

    exb文件手机怎么打开(exb格式手机用什么软件打开)

  • 手机贴吧怎么私信(手机贴吧怎么设置帖子隐私)

    手机贴吧怎么私信(手机贴吧怎么设置帖子隐私)

  • 苹果在哪更新系统(iphone 在哪里更新)

    苹果在哪更新系统(iphone 在哪里更新)

  • cad怎么画六边形(CAD怎么画六边形)

    cad怎么画六边形(CAD怎么画六边形)

  • JS日期与字符串相互转换(时间格式化YYYY-MM-DD,Dayjs的使用)(js日期字符串转换为指定格式的日期)

    JS日期与字符串相互转换(时间格式化YYYY-MM-DD,Dayjs的使用)(js日期字符串转换为指定格式的日期)

  • 从奎雷英山口看到的 Leum na Luirginn湖和Cleat湖,英国斯凯岛 (© Sebastian Wasek/Sime/eStock Photo)

    从奎雷英山口看到的 Leum na Luirginn湖和Cleat湖,英国斯凯岛 (© Sebastian Wasek/Sime/eStock Photo)

  • 火车票全额抵减增值税可以吗
  • 购买股票交易费用计入
  • 专票不抵扣认证什么意思
  • 装修费用如何入账
  • 定期定额纳税申报表应税项应填哪个数
  • 企业职工保险如何转灵活就业
  • 房产企业赠送无形资产
  • 离婚财产分割涉及偷税漏税可以移交税务局调查吗
  • 二手房如何缴纳契税
  • 销售收入分成率计算公式
  • 出口退税进项税额转出是什么意思
  • 股东用技术股出售股票
  • 固定资产安装完毕达到预定可使用状态
  • 软件开发服务费会计分录
  • 基本医疗保险是什么?
  • 企业重组中撤资所得税有哪些处理规则?
  • 企业所得税汇算清缴退税账务处理
  • 一般纳税人提供服务税率
  • 纳税人首次办税补充信息表怎么填
  • 景区中设立的经济组织是
  • 固定资产当月清账怎么算
  • 个税缴纳累计是每年一算吗
  • 转登记日下期指的是什么
  • 开业庆典礼仪费计入什么科目?
  • 自有房屋的装修费计入长期待摊
  • 企业开票信息可以改吗
  • 小规模计提缴纳增值税
  • mac安装软件提示身份不明
  • 增值税进项税已勾选没确认能自动生成吗
  • 债务重组账务处理会计分录
  • 王者荣耀中马可波罗的一技能和大招
  • G40/50-70、SR1000随机Linux改安装Win7系统的实现方法
  • win10商店如何改地区
  • 红掌的养殖方法和注意事项
  • 借入长期借款的利息
  • 待摊费用和预提费用属于什么账户
  • 债券利息计算方法
  • kindeditor编辑器图片上传
  • yolov3目标检测步骤流程图
  • novelai本地部署电脑要求
  • c++ array
  • 人工智能导论论文2000字
  • 开发票的盘锁了
  • java拼接字符串和数字
  • 帝国cms修改提示怎么设置
  • mongodb官方文档中文
  • 小规模纳税人可以做进出口贸易吗
  • 门面出租需要什么手续
  • 公司吸收合并流程详细步骤
  • PostgreSQL新手入门教程
  • mysql日期和时间类型
  • 企业常用会计科目表及其解释
  • 差旅费属于什么会计科目 会计分录
  • 科目汇总表借方和贷方相等吗
  • 进项税额转出有余额怎么调整
  • 出售房产收入属于转让财产收入吗
  • 会计账簿怎么填写模式
  • 工会经费以前没交现在怎么补交
  • 什么是计提坏账准备
  • 企业投资人类型怎么选
  • sql批量修改数据语句
  • win8系统界面切换成win7
  • Win10预览版桌面图标和任务栏不翼而飞怎么办?
  • 组策略0x800704ec
  • Freebsd7.0 Apache2.2+MySQL5+PHP5安装和配置方法
  • Win10怎么关闭任务栏搜索
  • win8 metro启动界面
  • linux 文字处理
  • SPBBCSvc.exe - SPBBCSvc进程是什么文件 有什么作用
  • sentstrt.exe - sentstrt进程是什么文件 有什么用
  • cortana win10
  • 如何搭建node服务器
  • js每天的定时任务
  • JavaScript中的方法名不区分大小写
  • js遍历table的td
  • 税务局分类分级
  • 云南定额发票真伪查询平台
  • 荆州市税务局现任名单
  • 预交增值税税款退税流程
  • 山东省地方税务局关于个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设