直接修改 cols 配置中的 title 字段即可解决表头与字段名不一致问题,Layui 导出以 title 为准,无需改动后端或 exportData 方法;隐藏列导出需临时修改 cols 并注入对应数据;文件名和 sheet 名通过 exportFile() 参数控制,不带后缀;中文表头乱码多因打开方式不当,换行可用 \n(2.8.17+ 支持)。
导出时表头名称和字段名不一致怎么办
直接改 cols 配置里的 title 字段就行,layui 导出用的是列定义中的 title,不是 field。很多人误以为要改数据源或额外写映射逻辑,其实根本不用碰后端或 exportdata 方法。
常见错误现象:导出 Excel 表头是 user_name、create_time 这类下划线命名,看着像数据库字段而不是用户能看懂的中文;或者英文字段直接裸奔上表头。
- 确保初始化表格时,每列的
title已设为想要的导出名称,例如:{field: 'user_id', title: '用户编号'} - 如果某列设置了
templet渲染函数,导出仍以title为准,templet不影响导出内容 - 动态列(比如通过 JS 拼接
cols)也要保证拼进去的每个对象都有正确的title,别漏掉或写错键名
想导出隐藏列或额外加一列怎么办
Layui 默认只导出当前显示的列(hide: true 的列不会进 Excel),但你可以临时修改列配置再触发导出,不需要改原始 cols 定义。
使用场景:运营要导出「创建人姓名」但界面上没展示这列;或者需要加一列「导出时间」作为水印信息。
- 调用
table.exportFile()前,先用table.config['id'].cols[0]拿到当前列配置副本,push 一个新列对象(含title和field) - 新列的
field可以是任意字符串,只要在导出前把对应数据塞进data数组每一项里(例如row.export_time = new Date().toLocaleString()) - 注意兼容性:Layui 2.8+ 支持传入自定义
cols和data给exportFile(),老版本得用table.exportFile('id', data, cols)形式
导出文件名和 sheet 名称怎么改
文件名和 sheet 标签名是两个独立控制点,都靠 exportFile() 的参数传入,不是靠 table 初始化配置。
容易踩的坑:有人去翻 layui.table 源码找全局默认值,其实压根没这玩意儿;也有人把 filename 写成带 `.xlsx` 后缀的,结果下载下来变成 `xxx.xlsx.xlsx`。
-
filename参数只写名字不带后缀,例如filename: '用户数据报表',Layui 自动加 `.xlsx` -
sheetName是 Excel 里 tab 页的名称,默认是“Sheet1”,传字符串即可,长度建议 ≤ 31 字符(Excel 限制) - 如果导出前做了筛选或排序,想把条件也写进文件名,就拼在
filename里,比如`用户数据-${status}-导出`
中文表头导出乱码或格式错乱
不是编码问题,是 Excel 打开方式导致的假象。Layui 导出本质是生成标准 .xlsx,本身不含编码声明,Windows 自带 Excel 默认用 ANSI 打开无 BOM 的 CSV,但 Layui 导出的是二进制 xlsx,乱码基本只发生在手动改后缀或用旧版 WPS 打开时。
真实影响体验的是样式:比如长中文表头被截断、自动换行失效、字体偏小。
- 确认用的是最新版 Layui(≥2.9.1),旧版导出对中文宽度计算有偏差
- 避免在
title里塞 HTML 标签或空格占位符(如),Excel 解析会出错 - 如果必须强制换行,可以在
title字符串里插入\n,Layui 2.8.17+ 支持该换行符渲染为 Excel 中的单元格内换行
复杂点在于:导出逻辑和渲染逻辑共用同一套列配置,但导出时没法单独设置字体、背景色、列宽——这些得靠服务端生成 Excel 或前端用 SheetJS 二次处理。Layui 原生导出只管结构和文本内容。











