可修改Sheet名称,需绕过Layui封装,用xlsx.js手动导出:取table.cache数据,用XLSX.utils.json_to_sheet构建sheet,设置ws['!name'] = '自定义名'(≤31字符),再写入workbook并导出。
导出 Excel 时 Sheet 名称默认是 “Sheet1”,怎么改?
layui 的 table.exportfile() 方法本身不支持直接传入 sheet 名称,它底层调用的是 sheetjs(xlsx.js),而 layui 封装时把工作表名写死为 "sheet1"。所以你无论怎么配参数,exportfile() 都不会生效——这不是你配置错了,是 layui 没留口。
绕过 Layui 封装,用 xlsx.js 手动构造导出
必须跳过 table.exportFile(),自己拿表格数据 + xlsx.js 生成文件。关键点在于:先用 table.cache 拿数据,再用 XLSX.utils.aoa_to_sheet() 或 XLSX.utils.json_to_sheet() 构建 sheet,最后手动设 sheet['!ref'] 和 ws_name。
-
table.cache['your-table-id']是当前页渲染的数据(含格式化后的值,注意是否要原始字段) - 如果要导出全部页数据,得自己发请求拉取全量,Layui 表格不自动给你
- 用
XLSX.utils.json_to_sheet(data, { header: ['id', 'username', 'status'] })可控列顺序,比aoa_to_sheet更稳 - 设置 sheet 名称只需在写入 workbook 前赋值:
ws['!name'] = '用户汇总'(长度不能超 31 字符,含中文)
常见报错和兼容性注意
直接上 xlsx.js 导出,容易遇到几个典型问题:
- 导出文件打不开 → 检查是否漏了
XLSX.write(wb, { bookType: 'xlsx', type: 'array' }),type: 'binary'在新版 Chrome 下会乱码 - 中文 Sheet 名显示为方块 → 确保 xlsx.js 版本 ≥ 0.18.5,老版本对 Unicode 工作表名支持差
- 导出内容缺列或顺序错 → 不要用
table.config.cols自己拼 header,优先以data[0]的 key 为准,或显式定义header数组 - Layui 2.8+ 引入了内置 xlsx,但没暴露接口;建议外链独立引入
xlsx.full.min.js,避免版本冲突
一个最小可行导出示例
假设表格 ID 是 userTable,想导出名为 “员工名单” 的 Sheet:
const data = layui.table.cache['userTable'];
const ws = XLSX.utils.json_to_sheet(data, { header: ['id', 'username', 'email'] });
ws['!name'] = '员工名单'; // ← 就是这行控制 Sheet 名
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, ws['!name']);
XLSX.writeFile(wb, '员工名单.xlsx');
注意:header 数组顺序决定列序,字段名必须和 data 对象的 key 一致;如果后端返回字段带前缀(如 user_username),得先 map 一遍。
真正麻烦的不是改名字,而是 Layui 把数据、样式、合并单元格这些都隔离在内部,你要自定义就得重走整条链路——Sheet 名只是第一个拦路虎。











