新建Export2Excel.js

require('script-loader!file-saver') //保存文件用
require('script-loader!@/vendor/Blob') //转二进制用
require('script-loader!xlsx/dist/xlsx.core.min') //xlsx核心
require('script-loader!xlsx-style/dist/xlsx.full.min')
function generateArray(table) {var out = []var rows = table.querySelectorAll('tr')var ranges = []for (var R = 0; R < rows.length; ++R) {var outRow = []var row = rows[R]var columns = row.querySelectorAll('td')for (var C = 0; C < columns.length; ++C) {var cell = columns[C]var colspan = cell.getAttribute('colspan')var rowspan = cell.getAttribute('rowspan')var cellValue = cell.innerTextif (cellValue !== '' && cellValue == +cellValue) cellValue = +cellValue//Skip rangesranges.forEach(function (range) {if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null)}})//Handle Row Spanif (rowspan || colspan) {rowspan = rowspan || 1colspan = colspan || 1ranges.push({ s: { r: R, c: outRow.length }, e: { r: R + rowspan - 1, c: outRow.length + colspan - 1 } })}//Handle ValueoutRow.push(cellValue !== '' ? cellValue : null)//Handle Colspanif (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null)}out.push(outRow)}return [out, ranges]
}function datenum(v, date1904) {if (date1904) v += 1462var epoch = Date.parse(v)return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000)
}
//通用的数据和格式 (表头合并)
function sheet_from_array_of_arrays_mergeheader(data, ArrMerge) {var ws = { s: { '!row': [{ wpx: 67 }] } }ws['!cols'] = []var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } } //c是列-1  r是内容行for (var R = 0; R != data.length; ++R) {for (var C = 0; C != data[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.e.r = Rif (range.e.c < C) range.e.c = Cvar cell = { v: data[R][C], s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '13' } } }if (R == 0) {cell = {v: data[R],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (R == 1) {ws['!cols'].push({ wpx: 120 })cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center', wrapText: true }, font: { sz: '16', bold: true } }}}if (R == data.length - 1) {if (data[R][1] == '合计')cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (cell.v == null) continuevar 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[14]cell.v = datenum(cell.v)} else cell.t = 's'ws[cell_ref] = cell}}ws['!merges'] = ArrMergeif (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range)return ws
}//通用的数据和格式
function sheet_from_array_of_arrays(data, colNum) {var ws = { s: { '!row': [{ wpx: 67 }] } }ws['!cols'] = []var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } } //c是列-1  r是内容行for (var R = 0; R != data.length; ++R) {for (var C = 0; C != data[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.e.r = Rif (range.e.c < C) range.e.c = Cvar cell = { v: data[R][C], s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '13' } } }if (R == 0) {cell = {v: data[R],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (R == 1) {ws['!cols'].push({ wpx: 120 })cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center', wrapText: true }, font: { sz: '16', bold: true } }}}if (R == data.length - 1) {if (data[R][1] == '合计')cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (cell.v == null) continuevar 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[14]cell.v = datenum(cell.v)} else cell.t = 's'ws[cell_ref] = cell}}ws['!merges'] = [{ s: { c: 0, r: 0 }, e: { c: range.e.c, r: 0 } }]if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range)return ws
}
//个性化数据和格式(1)
function sheet_from_array_of_arrays_jmmxb(data, colNum) {var ws = { s: { '!row': [{ wpx: 67 }] } }ws['!cols'] = []var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } } //c是列-1  r是内容行for (var R = 0; R != data.length; ++R) {for (var C = 0; C != data[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.e.r = Rif (range.e.c < C) range.e.c = Cvar cell = { v: data[R][C], s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '13' } } }if (R == 0) {cell = {v: data[R],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (R == 1) {cell = { v: data[R], s: { alignment: { horizontal: 'left', vertical: 'left' }, font: { sz: '13' } } }}if (R == 2) {ws['!cols'].push({ wpx: 120 })cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (R == data.length - 1) {if (data[R][1] == '合计')cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (cell.v == null) continuevar 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[14]cell.v = datenum(cell.v)} else cell.t = 's'ws[cell_ref] = cell}}ws['!merges'] = [{ s: { c: 0, r: 0 }, e: { c: range.e.c, r: 0 } },{ s: { c: 0, r: 1 }, e: { c: range.e.c, r: 1 } }]if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range)return ws
}
//个性化数据和格式(2)
function sheet_from_array_of_arrays_hmzcjm(data) {var ws = { s: { '!row': [{ wpx: 67 }] } }ws['!cols'] = []var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } }var n = 0for (var R = 0; R != data.length; ++R) {for (var C = 0; C != data[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.e.r = Rif (range.e.c < C) range.e.c = Cvar cell = { v: data[R][C], s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '13' } } }if (R == 0) {ws['!cols'].push({ wpx: 140 })cell = {v: data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '16', bold: true } }}}if (R == data.length - 1) {cell = {v: '备注:' + data[R][C],s: { alignment: { horizontal: 'center', vertical: 'center' }, font: { sz: '14' } }}}if (cell.v == null) continuevar 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[14]cell.v = datenum(cell.v)} else cell.t = 's'ws[cell_ref] = cell}}// ec控制横向几格。sr控制竖向几格ws['!merges'] = [{ s: { c: 0, r: 0 }, e: { c: 3, r: 0 } },{ s: { c: 0, r: 1 }, e: { c: 0, r: 1 } },{ s: { c: 0, r: 2 }, e: { c: 0, r: 4 } },{ s: { c: 0, r: 5 }, e: { c: 0, r: 7 } },{ s: { c: 0, r: 8 }, e: { c: 0, r: 10 } },{ s: { c: 0, r: 11 }, e: { c: 0, r: 13 } },{ s: { c: 0, r: 14 }, e: { c: 0, r: 16 } },{ s: { c: 0, r: 17 }, e: { c: 0, r: 19 } },{ s: { c: 0, r: 20 }, e: { c: 0, r: 22 } },{ s: { c: 0, r: 23 }, e: { c: 0, r: 25 } },{ s: { c: 0, r: 26 }, e: { c: 3, r: 26 } }]if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range)return ws
}function Workbook() {if (!(this instanceof Workbook)) return new Workbook()this.SheetNames = []this.Sheets = {}
}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) & 0xffreturn buf
}export function export_table_to_excel(id) {var theTable = document.getElementById(id)var oo = generateArray(theTable)var ranges = oo[1]/* original data */var data = oo[0]var ws_name = 'SheetJS'var wb = new Workbook(),ws = sheet_from_array_of_arrays(data)/* add ranges to worksheet */// ws['!cols'] = ['apple', 'banan'];ws['!merges'] = ranges/* add worksheet to workbook */wb.SheetNames.push(ws_name)wb.Sheets[ws_name] = wsvar wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), 'test.xlsx')
}function formatJson(jsonData) {// console.log(jsonData)
}
//2003excel
export function export_json_to_excelFapiao(headerList, dataList, defaultTitle, colNum, div) {/* original data */var filterVal = []var tHeader = []for (var i = 0; i < headerList.length; i++) {if (headerList[i].ColumnKey === '') {/* 处理二级列项 */for (var j = 0; j < headerList[i].ColumnChild.length; j++) {tHeader = Boolean(headerList[i].ColumnName.replace(/\s/g, ''))? tHeader.concat(`${headerList[i].ColumnName}(${headerList[i].ColumnChild[j].ColumnName})`): tHeader.concat(headerList[i].ColumnChild[j].ColumnName)filterVal = filterVal.concat(headerList[i].ColumnChild[j].ColumnKey)}/* 处理一级列项 */} else {tHeader = tHeader.concat(headerList[i].ColumnName)filterVal = filterVal.concat(headerList[i].ColumnKey)}}// console.log("dataList",dataList)var data = dataList.map(v => filterVal.map(j => v[j]))data.unshift(tHeader)data.unshift([defaultTitle])if (colNum === undefined) colNum = 1var ws_name = 'SheetJS'var wb = new Workbook(),wsif (div === undefined) {ws = sheet_from_array_of_arrays(data, colNum)} else if (div === 'hmzcjm') {ws = sheet_from_array_of_arrays_hmzcjm(data)} else if (div === 'jmmxb') {var name = localStorage.usernamevar zbdw = localStorage.orgnamedata.splice(1, 0, ['制表单位:' + zbdw + '          ' + '制表人:' + name])ws = sheet_from_array_of_arrays_jmmxb(data)}/* add worksheet to workbook */wb.SheetNames.push(ws_name)wb.Sheets[ws_name] = wsvar wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })var title = defaultTitle || '列表'saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), title + '.xls')
}
export function export_json_to_excel(headerList, dataList, defaultTitle, colNum, div) {/* original data */var filterVal = []var tHeader = []for (var i = 0; i < headerList.length; i++) {if (!headerList[i].ColumnKey) {/* 处理二级列项 */for (var j = 0; j < headerList[i].ColumnChild.length; j++) {tHeader = Boolean(headerList[i].ColumnName.replace(/\s/g, ''))? tHeader.concat(`${headerList[i].ColumnName}(${headerList[i].ColumnChild[j].ColumnName})`): tHeader.concat(headerList[i].ColumnChild[j].ColumnName)filterVal = filterVal.concat(headerList[i].ColumnChild[j].ColumnKey)}} else {/* 处理一级列项 */tHeader = tHeader.concat(headerList[i].ColumnName)filterVal = filterVal.concat(headerList[i].ColumnKey)}}// console.log("dataList",dataList)var data = dataList.map(v => filterVal.map(j => v[j]))data.unshift(tHeader)data.unshift([defaultTitle])if (colNum === undefined) colNum = 1var ws_name = 'SheetJS'var wb = new Workbook(),wsif (div === undefined) {ws = sheet_from_array_of_arrays(data, colNum)} else if (div === 'hmzcjm') {ws = sheet_from_array_of_arrays_hmzcjm(data)} else if (div === 'jmmxb') {var name = localStorage.usernamevar zbdw = localStorage.orgnamedata.splice(1, 0, ['制表单位:' + zbdw + '          ' + '制表人:' + name])ws = sheet_from_array_of_arrays_jmmxb(data)}/* add worksheet to workbook */wb.SheetNames.push(ws_name)wb.Sheets[ws_name] = wsvar wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })var title = defaultTitle || '列表'saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), title + '.xlsx')
}
export function export_json_to_excel_Merge(headerList, dataList, defaultTitle, colNum, div) {/* original data */var filterVal = []var tHeader = []var tHeader2 = []var ArrMerge = []var numberone = 0var numbertwo = 0headerList.forEach((item, index) => {if (item.ColumnKey === '') {ArrMerge.push({s: { c: numberone + numbertwo, r: 1 },e: { c: numberone + numbertwo + item.ColumnChild.length - 1, r: 1 }})item.ColumnChild.forEach((items, indexs) => {;(tHeader2 = tHeader2.concat(items.ColumnName)),(filterVal = filterVal.concat(items.ColumnKey)),(tHeader = tHeader.concat(item.ColumnName)),numberone++})} else {tHeader2 = tHeader2.concat(item.ColumnName)filterVal = filterVal.concat(item.ColumnKey)tHeader = tHeader.concat(item.ColumnName)numbertwo++ArrMerge.push({ s: { c: numberone + numbertwo - 1, r: 1 }, e: { c: numberone + numbertwo - 1, r: 2 } })}})ArrMerge.unshift({ s: { c: 0, r: 0 }, e: { c: numberone + numbertwo - 1, r: 0 } })var data = dataList.map(v => filterVal.map(j => v[j]))data.unshift(tHeader2)data.unshift(tHeader)data.unshift([defaultTitle])if (colNum === undefined) colNum = 1var ws_name = 'SheetJS'var wb = new Workbook(),wsif (div === undefined) {ws = sheet_from_array_of_arrays(data, colNum)} else if (div === 'mergeheader') {ws = sheet_from_array_of_arrays_mergeheader(data, ArrMerge)} else if (div === 'hmzcjm') {ws = sheet_from_array_of_arrays_hmzcjm(data)} else if (div === 'jmmxb') {var name = localStorage.usernamevar zbdw = localStorage.orgnamedata.splice(1, 0, ['制表单位:' + zbdw + '          ' + '制表人:' + name])ws = sheet_from_array_of_arrays_jmmxb(data)}/* add worksheet to workbook */wb.SheetNames.push(ws_name)wb.Sheets[ws_name] = wsvar wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })var title = defaultTitle || '列表'saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), title + '.xlsx')
}

在需要使用的地方复制使用

 let headList=[{ColumnAlign: "center",ColumnKey:"a",ColumnName: "测试a",ColumnOrder: "CDHSTATUS",ColumnWidth: 90},{ColumnAlign: "center",ColumnKey:"b",ColumnName: "测试b",ColumnOrder: "CDHSTATUS",ColumnWidth: 90}]let OutDataExcel=[{a:1,b:2....}]let header = '测试表格' //文件名字if (dataList.length === 0) {this.$message.error('无导出数据!')return}require.ensure([], () => {const { export_json_to_excel } = require('@/vendor/Export2Excel')export_json_to_excel(headList, OutDataExcel, header)})

导出的就是正常的Excel文件

前端 js处理table数据转化为导出Excel文件相关推荐

  1. 如何使用JavaScript实现纯前端读取和导出excel文件(转)

    转自小茗同学博客:https://www.cnblogs.com/liuxianan/p/js-excel.html js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯 ...

  2. 如何使用JavaScript实现纯前端读取和导出excel文件

    js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls.xlsx.ods(一种OpenOffice专 ...

  3. h5页面如何预览excel文件_如何使用JavaScript实现前端导入和导出excel文件?(H5编辑器实战复盘)...

    前言 最近笔者终于把H5-Dooring的后台管理系统初步搭建完成, 有了初步的数据采集和数据分析能力, 接下来我们就复盘一下其中涉及的几个知识点,并一一阐述其在Dooring H5可视化编辑器中的解 ...

  4. 如何使用JavaScript实现前端导入和导出excel文件(H5编辑器实战复盘)

    前言 最近笔者终于把H5-Dooring的后台管理系统初步搭建完成, 有了初步的数据采集和数据分析能力, 接下来我们就复盘一下其中涉及的几个知识点,并一一阐述其在Dooring H5可视化编辑器中的解 ...

  5. 从前台获取数据,并导出PDF文件

    从前台获取数据,并导出PDF文件 Jsp页面: <div style="width:30%;height:100%;float:left;" id="gzbddiv ...

  6. 纯原生JS实现导出Excel文件

    前言: 各种js库用起来冗余,并且只想简单的导出excel文件 选择table标签是为了后期能定制化内容 0.效果预览 excel文件: 浏览器控制台 触发下载: 1.定义工具函数: // xlsxE ...

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

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

  8. 解决前端导出excel文件,打开为乱码

    前端开发中,导入和导出文件是比较常见的业务场景,楼主在初次接触此类问题时,也在此卡了几天,好在问题最终也得以解决,废话不多说了直接上代码: <el-upload:on-error="u ...

  9. 纯js导出Excel文件(无需引入插件)

    纯js导出Excel文件(无需引入插件) 提示:代码没有来得及整理,大致代码都在这里 let thlist = [[{text: '序号', rowspan: '2'},{text: '姓名', ro ...

最新文章

  1. 【心情】为什么发英文版免责声明?
  2. 驱动中获取PsActiveProcessHead变量地址的五种方法
  3. HTTP/2笔记之连接建立
  4. .Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示
  5. python练手_Python数据分析练手项目
  6. DB2 数据库清表语句
  7. 嵌入式开发中C语言编程要点简述!
  8. 【渝粤题库】陕西师范大学163202 管理学原理 作业(高起本 专升本)
  9. 打桩时不修改源码_考研网上报名点了修改报名,修改后到报名点时,出现部分信息不符合参考条件,请修改或重新报名...
  10. 二维粗糙海面matlab,三维随机粗糙海面的Monte-Carlo仿真
  11. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码
  12. Visual Studio-查看汇编代码
  13. android中倒计时控件CountDownTimer分析
  14. 2018 年寒假/春节,来蓝鲸玩吧!
  15. 指派问题:匈牙利算法
  16. 工具答疑---beyond compar文件无法编辑
  17. 科研写作——常见句式(九)
  18. Axure RP 9.0 Enterprise 原型设计
  19. USB composite 设计
  20. windows server 2008 R2 怎么集成USB3.0驱动

热门文章

  1. 计算机硬件的基本名词
  2. 三星手机安装linux系统下载,三星R18笔记本电脑安装Ubuntu8.04正式版
  3. php获取视频封面图,PHP执行Linux命令截取视频封面图
  4. Git - git 出现 fatal: refusing to merge unrelated histories 错误
  5. 人生中的第一次被辞退
  6. (尚硅谷)JavaWeb新版教程01-HTML
  7. python 截屏,合成 pdf
  8. 调试运行第一个xv6程序
  9. Ethernet(以太网)之二 物理介质(10Base、100Base-T、100Base-TX等)
  10. 002.3-b3dm的终极优化