Layui表格导出需手动构造cols和data:通过filter剔除export:false列,按cols顺序提取field值生成二维数组,CSV需加BOM头防乱码,日期要转字符串,templet渲染需同步映射。
导出时跳过指定列:用 export 的 cols 参数手动构造表头
layui 表格导出默认会把所有显示列(show 为 true 的列)都写进 excel,但实际常有“页面上显示、导出时隐藏”的需求,比如操作列、开关按钮、预览缩略图等。layui 原生不支持直接在列配置里加 export: false 这类开关,得自己接管导出逻辑。
核心做法是:不用 table.exportFile() 的快捷导出,改用 table.exportFile('id', data, 'csv') 或 'xlsx' 形式,其中 data 是你加工过的二维数组,cols 是你精简后的列定义数组。
- 先调用
table.config['your-table-id']拿到原始列配置,再用filter()剔除带特定标识的列(比如加个export: false自定义属性) -
data数组每一项对应一行,每项是对象;你需要按cols顺序,从每个对象里取对应field的值,组成新数组 - 注意:如果列用了
templet渲染(如把1显示成“启用”),导出时要同步做映射,否则 Excel 里还是原始值
给列加 export: false 标识后如何被识别
Layui 不认这个字段,但它允许你在列定义里塞任意自定义属性,只要你自己读取并判断就行。关键不是让 Layui 识别它,而是你导出前主动过滤掉这些列。
- 在
cols配置中给不想导出的列加上export: false,例如:{field: 'operate', title: '操作', export: false, toolbar: '#bar'} - 导出前用
layui.table.config['myTable'].cols[0].filter(col => col.export !== false)拿到有效列 - 确保
cols和data的字段顺序严格一致,否则 Excel 列错位
导出 CSV 与 XLSX 对列处理的差异
CSV 是纯文本,只关心字段值和分隔符;XLSX(依赖 SheetJS)能保留格式但对中文、特殊字符更敏感。列控制逻辑一样,但输出结果表现不同。
- CSV 导出用
table.exportFile('id', data, 'csv')即可,data是二维数组,首行为表头(字符串),后续为数据行(字符串或数字) - XLSX 需要额外引入
xlsx.full.min.js,且data必须是对象数组(每项一个对象),Layui 内部会自动转;此时cols只用于生成表头,不参与数据提取 - 如果某列
field是null或undefined,CSV 会导出为空字符串,XLSX 可能报错或留空,建议提前用|| ''处理
容易漏掉的兼容性坑:表头中文乱码和日期格式
导出 CSV 时中文变问号,不是编码问题,而是缺少 BOM 头;日期字段在 Excel 里显示成数字,是因为没转成字符串格式。
- CSV 文件必须以
\ufeff(UTF-8 BOM)开头,否则 Excel 默认用 ANSI 打开 → 在拼接 CSV 字符串前加'\ufeff' + csvString - 日期字段如
create_time: 1712345678000,导出前应转成new Date(val).toLocaleString()或固定格式字符串,否则 Excel 会当成毫秒数当数值处理 - 如果表格启用了
page: true分页,table.cache['id']只存当前页数据;要导出全部,得自己请求完整数据或用table.getData('all')(Layui 2.8+)


















