table.exportFile() 默认只导出当前页数据,需手动拼接全量数据或提取勾选项;导出中文需加BOM头\uFEFF防乱码;字段顺序按cols[0]定义,templet渲染内容不生效;千分位等格式需导出前重映射并加单引号强制文本。
table.exportFile() 直接导出当前页全部数据
最简方式就是调用 table.exportfile('your-table-id'),它会自动读取表格当前页渲染的数据(即 table.cache['your-table-id']),生成 csv 文件并触发下载。前提是表格已正确渲染且有数据。
注意:table.exportFile('id') 不会导出所有分页数据,只导出当前页;如果启用了分页且想导出全部,必须手动拼接所有页数据(比如从后端重新拉全量或缓存到 table.cache)。
- 不传第二个参数时,Layui 自动取
table.cache[id]作为数据源 - 表头顺序严格按
cols[0]中字段定义的顺序,field值必须与数据对象 key 一致 - 若列用了
templet渲染(如把status: 1显示为“启用”),导出值仍是原始1,不是渲染后文本
导出选中行数据(checkbox 场景)
table.exportFile() 本身不支持「仅导出勾选项」,必须手动提取勾选数据再传入。核心是用 table.checkStatus('your-table-id').data 获取当前页勾选项数组。
这个 data 是浅拷贝,可直接用,但只含当前页——跨页勾选必须自己维护 ID 集合或监听 table.on('checkbox') 动态收集。
- 校验
selectedData.length === 0,否则导出空内容(只有表头)易被用户误认为失败 -
headers要按cols[0]顺序 map 出来,和selectedData每行字段顺序必须完全对齐 - 导出调用写法:
table.exportFile(headers, selectedData, 'csv'),第三个参数是字符串'csv',不是对象
解决中文乱码:加 BOM 头 \ufeff
Windows 版 Excel 默认用 GBK 打开 CSV,而 Layui 导出的是 UTF-8 字符串,没 BOM 就容易显示为方块或问号。最轻量解法是在 CSV 字符串开头拼上 \ufeff。
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
不要改 type 参数或试图加 charset=gbk,table.exportFile 不解析编码声明,只原样写入你传的字符串。
- 构造 CSV 时第一行前加
'\ufeff' + headersRow - 每行字段含引号、逗号、换行时需手动转义(如双引号替换成两个双引号)
- 如果必须用 GBK 编码(比如对接老旧系统),得用
iconv-lite把字符串转成Uint8Array再构造 Blob,不能只靠字符串拼接
自定义字段顺序与格式(如千分位)
导出前重映射数据是最可控的方式:遍历原始数据,对数字字段调用 toLocaleString('en-US') 加逗号,并确保字段名与表头一一对应。
注意 table.cache['id'] 比 table.config.data 更可靠,尤其在搜索、分页后,后者可能还是初始数据。
- 字段可能是字符串(如后端返回
"12345.67"),需先parseFloat()再判断类型,否则typeof会跳过格式化 - Excel 打开 CSV 时若自动去掉千分位逗号,说明它把该字段当数值解析了——强制文本方案是在值前加单引号,如
'"12,345.67"' - 导出 Excel(
xls)时千分位字符串会被 Excel 自动转回数字格式,这不是 Layui 问题,CSV 是唯一能 100% 保留格式的前端导出路径
checkStatus().data 跨页有效,或者忘了加 \ufeff 导致 Windows 用户打不开中文。这两点不处理,其他都白搭。

















