layui.exportFile()不支持多表同Sheet导出,需用SheetJS手动合并数据或layui-excel插件实现多Sheet导出。
layui.exportFile() 无法直接导出多张表格到同一 Sheet
layui 自带的 table.exportfile() 方法只支持单数据源导出,每次调用生成一个独立 excel 文件,且强制覆盖——它不接受多个数据数组、也不支持“追加到已有 sheet”的逻辑。你传多个表格数据进去,只会导出最后一个。
想把多张表格数据合并进同一个 Sheet,得手动拼接数据
核心是:不依赖 exportFile(),而是用 SheetJS 把多份数据先合并成一个二维数组(或扁平化 JSON),再转成 worksheet。
- 提取第一张表数据:
table.cache['table1-id'] - 提取第二张表数据:
table.cache['table2-id'] - 手动合并(注意字段对齐):比如都取
{name, age, dept}结构,缺失字段补空字符串 - 用
XLSX.utils.json_to_sheet()或XLSX.utils.aoa_to_sheet()转换 - 调
XLSX.writeFile(wb, '合并.xlsx')导出
示例片段:
const data1 = table.cache['userList'] || [];
const data2 = table.cache['orderList'] || [];
// 假设两者结构不同,需统一字段
const merged = [
...data1.map(d => ({ name: d.name, type: '用户', id: d.id })),
...data2.map(d => ({ name: d.customerName, type: '订单', id: d.orderId }))
];
const ws = XLSX.utils.json_to_sheet(merged);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, '汇总');
XLSX.writeFile(wb, '多表合并.xlsx');
若要多张表格分开放在不同 Sheet(不是同一 Sheet),用 layui-excel 更省事
layui-excel 插件原生支持多 Sheet 导出,且命名自由,不用手动构造 workbook。
- 必须引入完整版
xlsx.full.min.js(layui-excel依赖它) - 数据按 key 组织:
{ sheet1: [...], sheet2: [...] } - Sheet 名就是对象 key,如
sheet1→ Excel 标签显示“sheet1”,可改名但不能含\ / ? * [ ] - 顺序由对象属性顺序决定(ES2015+ 保证插入顺序),不是字母序
示例:
layui.excel.exportExcel({
'用户列表': table.cache['userList'],
'订单列表': table.cache['orderList']
}, '业务报表.xlsx', 'xlsx');
容易忽略的坑:字段不一致会导致 Excel 列错位
多表数据结构不同时,json_to_sheet() 会按第一个对象的 key 排列列头,后续对象缺失的 key 对应单元格留空,但多余 key 会被丢弃——表面看是“合并了”,实际可能列名和值错行。
- 务必提前统一字段名和顺序,建议用
map()显式投影 - 避免直接传
table.cache['x']和table.cache['y']拼接,除非确认 schema 完全一致 - 中文表头名没问题,但整个 Sheet 名不能超 31 字符,且不能含非法符号
真要保列对齐,最稳妥的是用 aoa_to_sheet() 手动构造二维数组,自己控制每一行每一列。


















