Export2Excel库默认放在ElementUI-Admin项目的src/vendor包中

不是通过package.json安装的依赖

这里直接贴库的源码:

/* eslint-disable */
require('script-loader!file-saver');
import XLSX from 'xlsx' 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.innerText;
if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; //Skip ranges
ranges.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 Span
if (rowspan || colspan) {
rowspan = rowspan || 1;
colspan = colspan || 1;
ranges.push({
s: {
r: R,
c: outRow.length
},
e: {
r: R + rowspan - 1,
c: outRow.length + colspan - 1
}
});
}; //Handle Value
outRow.push(cellValue !== "" ? cellValue : null); //Handle Colspan
if (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 += 1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
} function sheet_from_array_of_arrays(data, opts) {
var ws = {};
var range = {
s: {
c: 10000000,
r: 10000000
},
e: {
c: 0,
r: 0
}
};
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 = 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;
var cell = {
v: data[R][C]
};
if (cell.v == null) continue;
var 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;
}
}
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) & 0xFF;
return 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] = ws; var wbout = XLSX.write(wb, {
bookType: 'xlsx',
bookSST: false,
type: 'binary'
}); saveAs(new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}), "test.xlsx")
} export function export_json_to_excel({
multiHeader = [],
header,
data,
filename,
merges = [],
autoWidth = true,
bookType= 'xlsx'
} = {}) {
/* original data */
filename = filename || 'excel-list'
data = [...data]
data.unshift(header); for (let i = multiHeader.length-1; i > -1; i--) {
data.unshift(multiHeader[i])
} var ws_name = "SheetJS";
var wb = new Workbook(),
ws = sheet_from_array_of_arrays(data); if (merges.length > 0) {
if (!ws['!merges']) ws['!merges'] = [];
merges.forEach(item => {
ws['!merges'].push(XLSX.utils.decode_range(item))
})
} if (autoWidth) {
/*设置worksheet每列的最大宽度*/
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
};
} else {
return {
'wch': val.toString().length
};
}
}))
/*以第一行为初始值*/
let result = colWidth[0];
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j]['wch'] < colWidth[i][j]['wch']) {
result[j]['wch'] = colWidth[i][j]['wch'];
}
}
}
ws['!cols'] = result;
} /* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws; var wbout = XLSX.write(wb, {
bookType: bookType,
bookSST: false,
type: 'binary'
});
saveAs(new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}), `${filename}.${bookType}`);
}

  

主要使用的API是这两个方法:

// 1、提供一个table表格的dom的id属性的元素值,生成excel数据并导出
export_table_to_excel() // 2、提供JS数据来生成Excel文件
export_json_to_excel()

  

1、在使用的组件中引入导出库

import { export_json_to_excel } from '@/vendor/Export2Excel'

2、通用的做法是后台提供一个导出数据的接口

返回一个List数据,元素是对象,这里不赘述后台接口的开发

import { getVitalLimitConfigExportData } from '@/api/smrz/setting'

JSON数据格式:

{
"code": 200,
"data": [
{
"areaName": "连江县",
"cityName": "福州市",
"createDate": "2022-07-26 09:20:46",
"id": 6,
"liveScore": 233,
"placeArea": "350122",
"placeCity": "350100",
"placeCode": "3501228412",
"placeName": "天运网吧",
"updateDate": "2022-07-26 09:22:06",
"videoScore": 444
},
{
"areaName": "吉州区",
"cityName": "吉安市",
"createDate": "2021-08-11 10:26:39",
"id": 5,
"liveScore": 0.06,
"placeArea": "362401",
"placeCity": "362400",
"placeCode": "3624018888",
"placeName": "电竞酒店扣点账号",
"updateDate": "2021-08-11 14:47:38",
"videoScore": 0.06
},
{
"areaName": "玉山县",
"cityName": "上饶市",
"createDate": "2021-08-11 10:25:00",
"id": 4,
"liveScore": 0.06,
"placeArea": "362323",
"placeCity": "362300",
"placeCode": "3623230555",
"placeName": "万象测试",
"updateDate": "2021-08-11 10:25:00",
"videoScore": 0.06
},
{
"areaName": "玉山县",
"cityName": "上饶市",
"createDate": "2021-08-11 10:21:24",
"id": 2,
"liveScore": 0.06,
"placeArea": "362323",
"placeCity": "362300",
"placeCode": "3623230236",
"placeName": "网盾236",
"updateDate": "2021-08-11 10:21:24",
"videoScore": 0.06
},
{
"areaName": "信州区",
"cityName": "上饶市",
"createDate": "2021-08-11 09:50:26",
"id": 1,
"liveScore": 0.06,
"placeArea": "362301",
"placeCity": "362300",
"placeCode": "3623230235",
"placeName": "网盾235",
"updateDate": "2021-09-03 09:17:22",
"videoScore": 0.06
}
],
"message": "操作成功!",
"status": "success"
}

  

3、编写导出方法:

页面编写触发组件,声明绑定的执行方法

<el-button
  icon="el-icon-upload2"
  @click="exportExcel"
>导出Excel</el-button>

  

方法实现:

export_json_to_excel的参数有3个必要参数

- sheet页标题头

- sheet页标题头的key

- 格式化后的js数据

标题头 + 标题头的key

      excelHeader: [
'场所名称',
'场所编号',
'所属区域',
'图片活体阀值',
'视频活体阀值',
'创建时间',
'更新时间'
],
excelHeaderKey: [
'placeName',
'placeCode',
'areaName',
'liveScore',
'videoScore',
'createDate',
'updateDate'
]

  

formatJson的作用是把【接口数据】按照【标题头的key】赋值

在这里可以翻译字段,处理特殊字段,或者自定义匹配

v是当前遍历的接口List的对象,j是标题头key的值,也就是字段名

    formatJson(filterVal, jsonData) {
return jsonData.map(v => filterVal.map(j => {
// console.log(v, j)
if (j === 'areaName') return v['cityName'] + v['areaName']
else return v[j]
}))
}

这里列举以前在外包写的比较复杂的处理:

下面是最后的实现写法

    async exportExcel() {
const { data: res } = await getVitalLimitConfigExportData(this.param)
const fileName = spawnExcelFileName('百度云活体阈值配置表') const data = this.formatJson(this.excelHeaderKey, res)
export_json_to_excel({
header: this.excelHeader,
data: data,
filename: fileName
})
},

  

最后导出结果:

【导出Excel】 JS的Excel导出库 Export2Excel的更多相关文章

  1. html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式

    先上代码   <script type="text/javascript" language="javascript">   var idTmr; ...

  2. js实现一键导出Excel

    演示地址:https://xibushijie.github.io/static/ExportToExcel.html <!DOCTYPE html> <html lang=&quo ...

  3. js导出table中的EXCEL总结

    导出EXCEL通常是用PHP做,可是项目中,有时候PHP后端project师返回的数据不是我们想要的,作为前端开发project师,把相应的数据编号转换为文字后,展示给用户.可是.需求要把数据同一时候 ...

  4. js导入excel&导出excel

    Excel导入 html代码 <button style={{ color: '#1890ff', fontSize: '14px', cursor: 'pointer' }} onClick= ...

  5. 导出带图片的Excel——OOXML文件分析

    需求: 普通js导出文件excel具有兼容性问题,通过js-xsl导出文件API未找到导出图片的方案,实例过少,因此针对07年后以.xlsx后缀的excel文件,通过修改后缀.zip参考文件模板来实现 ...

  6. Spring MVC 实现Excel的导入导出功能(1:Excel的导入)

    简介 这篇文章主要记录自己学习上传和导出Excel时的一些心得,企业办公系统的开发中,经常会收到这样的需求:批量录入数据.数据报表使用 Excel 打开,或者职能部门同事要打印 Excel 文件,而他 ...

  7. MVC导出Excel,提供下载Excel

    类1: using System.Collections.Generic;using System.Data;using System.Web.Mvc;using System.IO;using Sy ...

  8. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)      select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...

  9. java 实现Excel压缩成Zip导出

    1 概述 在web项目中常见的一种场景就是将文件导出为Excel,但是当需要导出多个Excel时,使用者将频繁操作,这样就严重降低了项目的友好交互性以及易用性,那么怎么才能优雅的解决这个问题呢?笔者今 ...

  10. SQL SERVER 和ACCESS、EXCEL的数据导入导出

    SQL SERVER 与ACCESS.EXCEL之间的数据转换SQL SERVER 和ACCESS的数据导入导出[日期:2007-05-06]     来源:Linux公社  作者:Linux 熟 悉 ...

随机推荐

  1. RHCSA认证学习_尝试

    第一天 一,linux系统的基本概念以及命令终端字段含义介绍 linux系统的基本概念: ·多用户的系统:允许同时执行多个任务 ·多任务的系统:允许同时执行多个任务 ·严格区分大小写:命令,选项,参数 ...

  2. python-一种去掉前后缀获取子串的方法

    假设有一个字符串,其数据组成方式为:"mode_id1_str_id2",其中id1和id2为任意个数的数字,若存在mode,则id1必然也存在,否则都不存在:id2可有可没有. ...

  3. Mysql 5.7 及以上版本修改密码

    登录数据后.选择 mysql 数据库 use mysql; 修改密码 update user set authentication_string=PASSWORD("mynewpasswor ...

  4. 2D 3D 景深 动画 阴影

    2D 二维的平面空间,让元素在X轴或者Y轴进行变化 2D里面的功能函数 2D-位移 2D-旋转 2D-缩放 2D-倾斜 变形属性 transform:: 位移:transform:translate( ...

  5. 用 Sentence Transformers v3 训练和微调嵌入模型

    Sentence Transformers 是一个 Python 库,用于使用和训练各种应用的嵌入模型,例如检索增强生成 (RAG).语义搜索.语义文本相似度.释义挖掘 (paraphrase min ...

  6. INTEL S4500 960G 入手评测

    INTEL S4500 960G 入手评测 简易上个图: CDI AS SSD: CDM: AS SSD AND CDM: -

  7. 多个if查询及case when 语句

    concat( if(t2.`flow_flag`=1 and t1.`field_source`= '06','支付宝账号1',''),if(t2.`flow_flag`=0 and t1.`fie ...

  8. navicat 连接oracle 失败

    问题: 1.使用Navicat连接Oracle数据库时,报错ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA ...

  9. 准入控制器(Admission Controller):ResourceQuota,ImagePolicyWebhook

    目录 一.系统环境 二.前言 三.准入控制器简介 四.为什么需要准入控制器 五.启用/禁用ResourceQuota资源配额 5.1 查看默认启用/禁用的准入控制器插件 5.2 ResourceQuo ...

  10. Wakelocks 框架设计与实现

    Wakelocks 框架是基于Wakeup Source实现的为Android系统上层提供投票机制,以阻止系统进入休眠. 1.功能说明 该模块的支持受宏CONFIG_PM_WAKELOCKS控制.在使 ...