导出表头只取 cols 中 title 字段,与 field、templet、数据源无关;修改标题需更新列配置变量并 reload,临时加列需同步补字段数据。
直接改列配置里的 title 字段就行,导出完全以它为准,和页面渲染用的 templet 或字段名无关。
为什么改了 field 或数据源没用
很多人试图在后端返回数据时把 user_name 改成 “用户名”,或者在 templet 里写中文渲染——这些对导出无效。Layui 导出逻辑只读 cols 数组中每列的 title 值,不关心你界面上怎么显示、数据里叫什么。
- 常见错误现象:
field: 'create_time'对应的导出表头还是create_time,不是“创建时间” - 根本原因:初始化表格时漏写了
title,或写成了text/label等错误键名 - 哪怕该列用了
templet渲染按钮、状态徽章,导出时仍取title,不会自动 fallback 到field
如何安全修改已存在的列标题
别直接操作 table.config.cols 的副本,容易 reload 后失效。正确做法是把列配置抽成变量,再改再重载:
- 初始化时定义列配置变量:
let myCols = [[{field: 'status', title: '状态'}]]; - 需要改标题时,直接赋值:
myCols[0][0].title = '订单状态'; - 调用
table.reload('table-id', { cols: myCols }),确保传入的是同一引用 - 如果用了多级表头(
children),要递归遍历,不能只扫myCols[0]
导出时想临时加一列但页面不显示
比如加“导出时间”水印列,页面上不需要,但 Excel 表头要有。这时不能只改 title,还得补数据:
- 先构造新列对象:
{field: 'export_time', title: '导出时间'} - 把它
push进myCols[0](注意顺序) - 遍历原始数据,给每行加上该字段:
row.export_time = new Date().toLocaleString() - 调用
table.exportFile('id', data, myCols),显式传入data和myCols - 老版本 Layui(
真正容易被忽略的是:如果你在搜索、排序后动态改了 title,但后续又点了分页或工具栏刷新,reload 若没带 { cols: myCols },刚设的标题就丢了——因为内部 reload 默认复用初始配置,不继承运行时修改。











