table.exportfile('id')只导出一页是因为其行为依赖table.cache['id']中的数据,而该缓存仅含渲染时已加载的页面数据;若page:true且后端分页,则cache仅有当前页数据,故导出受限。

直接调用 table.exportFile('id') 就能导出全部数据,但必须确认表格渲染时没开 page: true;开了分页,就得手动取 table.cache['id'],否则只导出当前页。
为什么 table.exportFile('id') 有时只导出一页?
这个方法的行为取决于表格初始化时的 page 配置:
- 如果渲染时写了
page: false或压根没写page,table.exportFile('id')会从table.cache['id']拿全部加载过的数据(即所有页)——前提是后端一次性返回了全部数据 - 如果写了
page: true且后端是分页接口(比如每次只返回 10 条),那table.cache['id']里就只有当前页的数据,exportFile('id')自然也只导出这一页 - 它不关心你有没有滚动翻页,也不主动请求其他页数据,只读 cache 里已有的部分
如何确保导出全部数据(含分页)?
最稳的方式是让后端提供一个「不分页」的导出接口,前端直接请求并下载。但如果必须用前端导出,就得自己拼全量数据:
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
- 提前在表格渲染时加
done: function(res, curr, count) { ... }回调,把res.data(当前页数据)合并进全局数组,比如window.allExportData = window.allExportData || [],再.push(...res.data) - 或者改用
page: false渲染表格(仅限数据量小、可一次性加载完的场景) - 导出时传入:
table.exportFile(['ID', '用户名'], window.allExportData, 'csv')
导出 CSV 必须处理的三个实际问题
即使拿到全量数据,直接传给 exportFile() 仍可能出错:
- 中文乱码:Windows Excel 默认不认 UTF-8,必须在 CSV 字符串最开头加
\ufeff(BOM),不能靠type参数或charset声明 - 字段含逗号/换行符:比如地址是“北京市,朝阳区”,不包裹双引号就会被 Excel 拆成两列;需逐字段检测
includes(',')或includes('"'),满足则用"${val.replace(/"/g, '""')}"包裹 - 数字变科学计数法:手机号、长 ID 导出后变成
1.35E+10,解决办法是在对应字段值前加单引号,如'13500000000',Excel 会当文本处理
真正麻烦的不是「怎么导出」,而是「导出后 Excel 能不能原样打开」——BOM、字段转义、数字前置单引号,这三个点漏掉任意一个,用户双击打开就是一连串问号或错位。










