提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
vue 中luckysheet实现导出

文章目录

  • vue中luckysheet实现导出
  • 二、使用步骤
    • 1.引入库
    • 2.vue 组件中初始化表格容器
    • 3.export.js
  • 总结

vue中luckysheet实现导出

本文属于转载

二、使用步骤

1.引入库

代码如下(示例):

在index.js 中引入静态资源
npm install exceljs
npm install FileSaver

    <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' /><link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' /><link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' /><link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' /><script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script><script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.umd.js"></script>

2.vue 组件中初始化表格容器

代码如下(示例):

<template><div><div style="padding:10px 10px 0 10px"><el-form inline :model="dataForm"><el-button type="primary" plain @click='downloadExcel()'>下载</el-button></el-form-item></el-form></div><div id="luckysheet" style="margin:0px;padding:0px;position:absolute;width:100%;left: 0px;top: 60px;bottom:0px;"></div><div v-show="isMaskShow" style="position: absolute;z-index: 1000000;left: 0px;top: 0px;bottom: 0px;right: 0px; background: rgba(255, 255, 255, 0.8); text-align: center;font-size: 40px;align-items:center;justify-content: center;display:flex;">Downloading</div></div>
</template><script>
import LuckyExcel from 'luckyexcel'
import moment from 'moment'
//外部引入方法
import {exportExcel} from '../../../components/report/export'
export default {data(){return {tableData:[ {"name": "Sheet2","color": "","index": 1,"status": 0,"order": 1,"celldata": [],"config": {}}],isMaskShow: false,}},created () {this.getFormData();},mounted() {this.init() //初始化容器放在mounted中},methods:{init(){let that = this$(function () {luckysheet.create({container: 'luckysheet', // 设定DOM容器的idtitle: 'xx 站信息', // 设定表格名称lang: 'zh', // 设定表格语言plugins:['chart'],showtoolbar:true,data:that.tableData});});},downloadExcel(){let files = luckysheet.getluckysheetfile()console.log('表格数据',files);exportExcel(luckysheet.getAllSheets(),"厂站信息")},}
}
</script>

3.export.js

代码如下(示例):

    // import { createCellPos } from './translateNumToLetter'
const Excel = require('exceljs')
import FileSaver from 'file-saver'
export var exportExcel = function(luckysheet, value) {// 参数为luckysheet.getluckysheetfile()获取的对象// 1.创建工作簿,可以为工作簿添加属性const workbook = new Excel.Workbook()// 2.创建表格,第二个参数可以配置创建什么样的工作表if (Object.prototype.toString.call(luckysheet) === '[object Object]') {luckysheet = [luckysheet]}luckysheet.forEach(function(table) {if (table.data.length === 0) return  true// ws.getCell('B2').fill = fills.const worksheet = workbook.addWorksheet(table.name)const merge = (table.config && table.config.merge) || {}const borderInfo = (table.config && table.config.borderInfo) || {}// 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值setStyleAndValue(table.data, worksheet)setMerge(merge, worksheet)setBorder(borderInfo, worksheet)return true})// return// 4.写入 bufferconst buffer = workbook.xlsx.writeBuffer().then(data => {// console.log('data', data)const blob = new Blob([data], {type: 'application/vnd.ms-excel;charset=utf-8'})console.log("导出成功!")FileSaver.saveAs(blob, `${value}.xlsx`)})return buffer
}var setMerge = function(luckyMerge = {}, worksheet) {const mergearr = Object.values(luckyMerge)mergearr.forEach(function(elem) {// elem格式:{r: 0, c: 0, rs: 1, cs: 2}// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)worksheet.mergeCells(elem.r + 1,elem.c + 1,elem.r + elem.rs,elem.c + elem.cs)})
}var setBorder = function(luckyBorderInfo, worksheet) {if (!Array.isArray(luckyBorderInfo)) return// console.log('luckyBorderInfo', luckyBorderInfo)luckyBorderInfo.forEach(function(elem) {// 现在只兼容到borderType 为range的情况// console.log('ele', elem)if (elem.rangeType === 'range') {let border = borderConvert(elem.borderType, elem.style, elem.color)let rang = elem.range[0]// console.log('range', rang)let row = rang.rowlet column = rang.columnfor (let i = row[0] + 1; i < row[1] + 2; i++) {for (let y = column[0] + 1; y < column[1] + 2; y++) {worksheet.getCell(i, y).border = border}}}if (elem.rangeType === 'cell') {// col_index: 2// row_index: 1// b: {//   color: '#d0d4e3'//   style: 1// }const { col_index, row_index } = elem.valueconst borderData = Object.assign({}, elem.value)delete borderData.col_indexdelete borderData.row_indexlet border = addborderToCell(borderData, row_index, col_index)// console.log('bordre', border, borderData)worksheet.getCell(row_index + 1, col_index + 1).border = border}// console.log(rang.column_focus + 1, rang.row_focus + 1)// worksheet.getCell(rang.row_focus + 1, rang.column_focus + 1).border = border})
}
var setStyleAndValue = function(cellArr, worksheet) {if (!Array.isArray(cellArr)) returncellArr.forEach(function(row, rowid) {row.every(function(cell, columnid) {if (!cell) return truelet fill = fillConvert(cell.bg)let font = fontConvert(cell.ff,cell.fc,cell.bl,cell.it,cell.fs,cell.cl,cell.ul)let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr)let value = ''if (cell.f) {value = { formula: cell.f, result: cell.v }} else if (!cell.v && cell.ct && cell.ct.s) {// xls转为xlsx之后,内部存在不同的格式,都会进到富文本里,即值不存在与cell.v,而是存在于cell.ct.s之后// value = cell.ct.s[0].vcell.ct.s.forEach(arr => {value += arr.v})} else {value = cell.v}//  style 填入到_value中可以实现填充色let letter = createCellPos(columnid)let target = worksheet.getCell(letter + (rowid + 1))// console.log('1233', letter + (rowid + 1))for (const key in fill) {target.fill = fillbreak}target.font = fonttarget.alignment = alignmenttarget.value = valuereturn true})})
}var fillConvert = function(bg) {if (!bg) {return {}}// const bgc = bg.replace('#', '')let fill = {type: 'pattern',pattern: 'solid',fgColor: { argb: bg.replace('#', '') }}return fill
}var fontConvert = function(ff = 0,fc = '#000000',bl = 0,it = 0,fs = 10,cl = 0,ul = 0
) {// luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)const luckyToExcel = {0: '微软雅黑',1: '宋体(Song)',2: '黑体(ST Heiti)',3: '楷体(ST Kaiti)',4: '仿宋(ST FangSong)',5: '新宋体(ST Song)',6: '华文新魏',7: '华文行楷',8: '华文隶书',9: 'Arial',10: 'Times New Roman ',11: 'Tahoma ',12: 'Verdana',num2bl: function(num) {return num === 0 ? false : true}}// 出现Bug,导入的时候ff为luckyToExcel的vallet font = {name: typeof ff === 'number' ? luckyToExcel[ff] : ff,family: 1,size: fs,color: { argb: fc.replace('#', '') },bold: luckyToExcel.num2bl(bl),italic: luckyToExcel.num2bl(it),underline: luckyToExcel.num2bl(ul),strike: luckyToExcel.num2bl(cl)}return font
}var alignmentConvert = function(vt = 'default',ht = 'default',tb = 'default',tr = 'default'
) {// luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转)const luckyToExcel = {vertical: {0: 'middle',1: 'top',2: 'bottom',default: 'top'},horizontal: {0: 'center',1: 'left',2: 'right',default: 'left'},wrapText: {0: false,1: false,2: true,default: false},textRotation: {0: 0,1: 45,2: -45,3: 'vertical',4: 90,5: -90,default: 0}}let alignment = {vertical: luckyToExcel.vertical[vt],horizontal: luckyToExcel.horizontal[ht],wrapText: luckyToExcel.wrapText[tb],textRotation: luckyToExcel.textRotation[tr]}return alignment
}var borderConvert = function(borderType, style = 1, color = '#000') {// 对应luckysheet的config中borderinfo的的参数if (!borderType) {return {}}const luckyToExcel = {type: {'border-all': 'all','border-top': 'top','border-right': 'right','border-bottom': 'bottom','border-left': 'left'},style: {0: 'none',1: 'thin',2: 'hair',3: 'dotted',4: 'dashDot', // 'Dashed',5: 'dashDot',6: 'dashDotDot',7: 'double',8: 'medium',9: 'mediumDashed',10: 'mediumDashDot',11: 'mediumDashDotDot',12: 'slantDashDot',13: 'thick'}}let template = {style: luckyToExcel.style[style],color: { argb: color.replace('#', '') }}let border = {}if (luckyToExcel.type[borderType] === 'all') {border['top'] = templateborder['right'] = templateborder['bottom'] = templateborder['left'] = template} else {border[luckyToExcel.type[borderType]] = template}// console.log('border', border)return border
}function addborderToCell(borders, row_index, col_index) {let border = {}const luckyExcel = {type: {l: 'left',r: 'right',b: 'bottom',t: 'top'},style: {0: 'none',1: 'thin',2: 'hair',3: 'dotted',4: 'dashDot', // 'Dashed',5: 'dashDot',6: 'dashDotDot',7: 'double',8: 'medium',9: 'mediumDashed',10: 'mediumDashDot',11: 'mediumDashDotDot',12: 'slantDashDot',13: 'thick'}}// console.log('borders', borders)for (const bor in borders) {// console.log(bor)if (borders[bor].color.indexOf('rgb') === -1) {border[luckyExcel.type[bor]] = {style: luckyExcel.style[borders[bor].style],color: { argb: borders[bor].color.replace('#', '') }}} else {border[luckyExcel.type[bor]] = {style: luckyExcel.style[borders[bor].style],color: { argb: borders[bor].color }}}}return border
}function createCellPos(n) {let ordA = 'A'.charCodeAt(0)let ordZ = 'Z'.charCodeAt(0)let len = ordZ - ordA + 1let s = ''while (n >= 0) {s = String.fromCharCode((n % len) + ordA) + sn = Math.floor(n / len) - 1}return s
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

vue 中luckysheet实现导出相关推荐

  1. 在vue中把数据导出Excel文件

    在vue中把数据导出Excel文件 第一次尝试写文章 在vue中把数据导出成Excel格式的文件,话不多,上代码: 第一步我们要先安装几个集成的插件 npm install -S file-saver ...

  2. vue中下载文件导出保存到本地

    vue中下载文件导出保存到本地 先分析如何下载:先有一个链接地址,然后使用 location.href或window.open()下载到本地 看看返回数据 res.config.url 中是下载链接地 ...

  3. vue中使用excel导出,详细步骤

    导出: 下载插件 cnpm install vue-json-excel -S// 导出图表 npm install vue-json-excel -S// 导出图表 在main.js中配置插件 im ...

  4. vue中table表格导出为图片格式

    vue中table表格点击下载为图片格式 实现思路:给页面中需要导出为图片的内容添加id名,调用封好的方法即可直接导出.以下是具体的实现方法 1.安装依赖 npm install --save htm ...

  5. vue中组件的导出导入_5.2 vue中 keep-alive 组件的作用,详细解释keep-alive使用方法...

    问题:vue中 keep-alive 组件的作用 keep-alive:主要用于保留组件状态或避免重新渲染. 比如: 有一个列表页面和一个 详情页面,那么用户就会经常执行打开详情=>返回列表=& ...

  6. vue中使用xlsx导出Excel 并设置样式,解决未完全合并单元格框线的BUG

    今天有需到一个需求,需要在前端直接导出表格,将了解发现了npm上用的比较多的 xlsx 这个包,但是在使用过程中发现很多问题,下边是我将发现问题进行的汇总以及相应的解决办法. 1.安装 首先说安装问题 ...

  7. vue中使用excelJs导出excel

    excelJs exceljJs文档:https://github.com/exceljs/exceljs/blob/master/README_zh.md 创建工作表 导入依赖 import Exc ...

  8. vue中使用XLSX导出多表头/单表头表格,开箱即用。

    效果图: 上代码: //先安装这两个依赖,xlsx-style是边框,颜色,字号样式. import XLSX from "xlsx"; import XLSX2 from 'xl ...

  9. VUE中使用xlsx导出excel表格

    首先下载 npm install xlsx@0.17.0 file-saver@2.0.5 --save 注意需要指定版本才行,如果直接下载,会报依赖的错误,找不到export default . 然 ...

最新文章

  1. oracle 11所选安装,在red hat enterprise linux 5.4上安装oracle11g
  2. tensorflow2 存取模型_思维导图:长短期记忆模型
  3. 关于防范csrf攻击基于token鉴权
  4. dropblock torch
  5. 2017-06-09 问题
  6. 服务器管理安全(上)
  7. 【大会】没有什么比把码率降低更爽的了
  8. ssl2645-线段树练习2【线段树】
  9. InstallShield For .Net制作.Net项目安装包之完整代码
  10. 【Python学习】 - pyecharts包 - 地图可视化
  11. 软件开发方法之敏捷开发,你用了么?
  12. 关于《windows游戏编程大师技巧》的源代码
  13. 关闭笔记本电脑计算机键盘,笔记本电脑键盘怎么关_笔记本电脑键盘关闭步骤-win7之家...
  14. jap里的java文件代码_jap里的java文件代码
  15. PCB六层板如何分层最好?
  16. wordpress改作cms备忘
  17. ElasticSearch 数据迁移
  18. 无权图的单源最短路径
  19. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求三门
  20. 【动网论坛7.1 sp1 修改】-论坛短信无刷新弹出

热门文章

  1. dataframe交换某两行(多行)的数据
  2. 一、视频监控技术概述
  3. SVA(立即断言、并发断言、触发判断)-概述
  4. windows“运行”中的快捷命令
  5. nvidia nano平台tca9546接入两路imx219调试记录
  6. (马蹄集)直线切平面 线段 圆切平面
  7. 阿里云MNS Queue Rest API操作示例
  8. 晋中市中等职业学校技能大赛
  9. 公司注册地址同区变更和跨区变更准备材料是一样的吗
  10. 同一台 win10 服务器跑多个 wiki(包括 DokuWiki、django-wiki)