index 页面,显示所有明细记录,分页显示 20/perpage, 导出 excel 功能,只导出了一页的数据,这可怎么办?? 如何导出所有数据或者查询之后的数据,前提数据量巨大 (100w),并且会逐渐增长
如果想全部导出这 100w 数据有点不可能啊,内存溢出,有没有好的办法可以解决,总之是为了导出 excel
单独写一个导出 excel 文件数据的处理(比如单独的 SQL 语句)
至于性能问题,xls 文件单 sheet 只能支持 65535 行条数据,你确定要导出数据只能用在 xlsx 格式的么
我们是这样搞的,使用 axlsx 生成 xlsx,支持超过 65535 条数据。 使用 sidekiq 来在后台导出生成文件。 然后数据查询里边分页导出,每次导出 5000 条,自动下一页,一直循环直到完成。
#7 楼 @zhangyanan 写错,直接用 Resource.find_each 默认一次加载 1000 条,还有一个方法叫 find_in_batches, 可以指定加载 N 条,比如 5000 条,把这 5000 条保存到 excel, 这样下来就会到处多个 excel 了,可以看一下 api
#5 楼 @zhangyanan 我是先计算多少页,就是先 count,再除以 5000(比如)(取模不为 0 则要多加 1 页),算出比如有 30 页,然后循环 30 次,像这样 limit(5000).offset(page*5000 - 5000),page 就是第几页,这样每次就只取 5000 条,不断地把这 5000 条写入 xlsx。这只是我的思路。
我以前都是这样做
step = Resource.all.count/10
10.times do |x|
resources = Resource.offset(step*x).limt(step*(x+1))
%导出csv
end