扩展 layui 的导出插件 layui.excel

sadwind2022-06-08笔记445

就像下面说的一样,遇到问题。https://gitee.com/zypy333/layui-excel

之前在工作过程中还有社区交流过程中,发现对导出 Excel 文件有需求,所以就萌发了封装插件的想法。导出excel功能基于 XLSX.js,部分代码参考网上的资料。

环境提示:预览环境需要部署在服务器下,不然无法异步获取需要导出的数据

函数列表

函数名描述
downloadExcel(data, filename, type)导出数据,并弹出指定文件名的下载框
filterExportData(data, fields)梳理导出的数据,包括字段排序和多余数据过滤

重要函数参数配置

downloadExcel参数配置

核心方法,用于将 data 数据依次导出,如果需要调整导出后的文件字段顺序或者过滤多余数据,请查看 filterExportData 方法

参数名称描述默认值
data数据列表必填
filename文件名称(不要带后缀)必填
type导出类型,支持 xlsx、csv、ods、xlsb、fods、biff2xlsx
filterExportData参数配置

辅助方法,梳理导出的数据,包括字段排序和多余数据过滤

参数名称描述默认值
data需要梳理的数据必填
fields支持数组和对象,用于映射关系和字段排序必填

fields参数设计

在实际使用的过程中,后端给的参数多了,或者字段数据不符合导出要求,这都是很常见的情况。为了导出数据的顺序正确和数据映射正确,于是新增了这个方法。

fields 用于表示对象中的属性顺序和映射关系,支持『数组』和『对象』两种方式

假如后台给出了这样的数据:

{    "code":0,    "msg":"",    "count":3,    "data":[        {            "id":10000,            "username":"user-0",            "sex":"女",            "city":"城市-0",            "sign":"签名-0",            "experience":255,            "logins":24,            "wealth":82830700,            "classify":"作家",            "score":57        }    ]}

数组方式:

仅用于排序、字段过滤,比如我希望的导出顺序和字段是:

idsexusernamecity

那么,我可以这样写:

var data = [];// 假设的后台的数据excel.filterExportData(data, ['id', 'sex', 'username', 'city']);excel.downloadExcel(data, '导出测试', 'xlsx');

对象方式:

可以用于排序、重命名字段、字段过滤,比如我希望 username 字段重命名为 name,保留 sex 和 city 字段

那么,我可以这样写:

var data = [];// 假设的后台的数据excel.filterExportData(data, {    username: 'name',    sex:'sex',    city: 'city'});excel.downloadExcel(data, '导出测试', 'xlsx');
调用样例

请见下方『使用方法』

功能概览:

  • 支持梳理导出的数据并导出多种格式数据

使用方法:

注意:此扩展需先引入layui.js方可正常使用。demo详见index.html

js使用样例:
// 注:extends/excel.js的存放路径layui.config({	base: 'extends/',}).extend({	excel: 'excel',});layui.use(['jquery', 'excel', 'layer'], function() {		var $ = layui.jquery;		var layer = layui.layer;		var excel = layui.excel;		// 模拟从后端接口读取需要导出的数据		$.ajax({			url: 'list.json'			,dataType: 'json'			,success(res) {				var data = res.data;				// 重点!!!如果后端给的数据顺序和映射关系不对,请执行梳理函数后导出				data = excel.filterExportData(data, [					'id'					,'username'					,'experience'					,'sex'					,'score'					,'city'					,'classify'					,'wealth'					,'sign'				]);				// 重点2!!!一般都需要加一个表头,表头的键名顺序需要与最终导出的数据一致				data.unshift({ id: "ID", username: "用户名", experience: '积分', sex: '性别', score: '评分', city: '城市', classify: '职业', wealth: '财富', sign: '签名' });				var timestart = Date.now();				excel.downloadExcel(data, '导出接口数据', 'xlsx');				var timeend = Date.now();				var spent = (timeend - timestart) / 1000;				layer.alert('单纯导出耗时 '+spent+' s');			}			,error() {				layer.alert('获取数据失败,请检查是否部署在本地服务器环境下');			}		});	});
导出数据返回样例:

此数据来自 layui 官方的表格样例

{    "code":0,    "msg":"",    "count":3,    "data":[        {            "id":10000,            "username":"user-0",            "sex":"女",            "city":"城市-0",            "sign":"签名-0",            "experience":255,            "logins":24,            "wealth":82830700,            "classify":"作家",            "score":57        },        {            "id":10001,            "username":"user-1",            "sex":"男",            "city":"城市-1",            "sign":"签名-1",            "experience":884,            "logins":58,            "wealth":64928690,            "classify":"词人",            "score":27        },        {            "id":10002,            "username":"user-2",            "sex":"女",            "city":"城市-2",            "sign":"签名-2",            "experience":650,            "logins":77,            "wealth":6298078,            "classify":"酱油",            "score":31        }    ]}
Demo说明:

index.html 页面文件+JS处理文件

list.json 模拟导出的数据

extends/authtree.js 权限树扩展

layui/ 官网下载的layui


relate content

TP6实现添加数据功能,重复提交问题

这是在使用一个基于TP6的开源的、名为FunAdmin的后台管理系统时,在此系统上二次开发时,自己新建一个应用,在实现添加数据功能时,总是出现重复提交,添加一次数据,实现添加了两条,代码也没啥问题。经...

php有内置函数array_unique可以用来删除数组中的重复值

array_unique -- 移除数组中重复的值array_unique说明array array_unique ( array array )array_unique() 接受 array 作为输...

VUE学习:十四.项目部署

VUE学习:十四.项目部署

前言前端开发也需要懂一些基本部署知识,确认已发布,测试是否成功发布本次项目代码打包项目代码得到前端项目的包文件目录,一般是dist文件目录npm run build1#1.ngin...

VUE学习:十.编码技巧

前言总结一些开发中常见的问题,优化改善编码技巧,提高代码质量#1.条件判断常见条件判断iflet name = "case1"if (nam...

Python爬虫高级开发工程师 教程

Python爬虫高级开发工程师 教程

Python爬虫高级开发工程师的教程,帮助你从零开始了解如何制作一个PYTHON爬虫,感兴趣的下载学习~夸克网盘:https://pan.quark.cn/s/61b702c0b137#/list/s...

VUE学习:十三.代码管理

前言前端开发中对代码的处理:代码的存储、代码的管控、代码的提交与合并#1.代码仓库以gitlab 为例配置 ssh权限#2.代码管理简单项目分支dev:开发分支,直接在 dev 上进行开发,测试环境没...

Post Reply    

◎Welcome to participate in the discussion.