table.checkStatus()仅返回当前页勾选项,非跨页聚合;需确保table.render时设id、在done回调或按钮事件中调用;导出前须构造二维数组,提取表头与渲染后字段值,并校验空选与列对齐。

table.checkStatus() 只返回当前页勾选项,别误用全量逻辑
导出当前页已选中的行,table.checkStatus('yourTableId') 就是正确入口——它天然只取当前页渲染范围内被勾选的原始数据,不是 bug,是设计。很多人卡在以为它能跨页聚合,结果在第 1 页勾了两行、第 3 页勾了一行,却只导出第 1 页的,其实是自己没切到第 3 页再调用。
必须确保:table.render() 初始化时写了 id: 'yourTableId';调用时机在 done 回调内或工具栏按钮点击事件中(DOM 已稳定);否则 table.checkStatus() 返回空对象或空数组,导出只有表头。
导出前必须手动构造二维数组,不能直接传 data
table.exportFile() 不接受对象数组,也不理解 templet 渲染逻辑。你直接传 checkStatus().data,Excel 里大概率列错位、字段为空,甚至静默失败。
- 先从
table.config.yourTableId.cols[0]拿列定义(注意不是cols[0]直接访问) - 用
cols.map(col => col.title || col.field)提取表头 - 对每行
row,按相同顺序cols.map(col => col.templet ? (typeof col.templet === 'function' ? col.templet(row) : row[col.field]) : row[col.field]) - 最终传入
table.exportFile(headers, [headers, ...rows], 'csv'),第二参数必须是二维数组
空数据要拦截,否则用户点完没反应还找不到原因
没勾任何行就点导出,table.exportFile() 仍会生成一个只有表头的空文件,体验极差。必须加显式校验:
if (!selectedData.length) { layer.msg('请至少勾选一行'); return; }- 如果某列值为
null或undefined,建议统一转为空字符串,避免 CSV 解析异常 - 导出前检查
headers和每行row长度是否一致,不一致就console.warn提示列顺序错乱
checkbox 配置和状态同步容易被忽略
表格初始化时没开 checkbox: true,或列定义里漏掉 type: 'checkbox',checkStatus() 就永远拿不到勾选项。更隐蔽的是:如果你用了 lay-skin="primary" 等自定义样式,但没配 skin: 'primary' 到 table.render 的 cols 里,勾选状态可能无法正确写入 DOM 数据流。
另一个坑是字段映射:如果某列用 templet 渲染「启用/禁用」,但原始数据里是 status: 1,而你导出时没手动调 templet 函数,导出的仍是数字而非文字——这不符合业务预期,得在 map 行数据时主动处理。


















