gpt4 book ai didi

ruby-on-rails - xlsx 问题 : create excel sheet with large number of rows

转载 作者:行者123 更新时间:2023-12-05 00:00:34 25 4
gpt4 key购买 nike

我正在使用 Axlsx 创建一个 excel 文件。对于小数据集,它工作正常。但是一旦数据集变大,它就会挂起。我在这个过程中运行了 strace,它做了很多 brk。

a = Axlsx::Package.new
book = a.workbook
book.add_worksheet(:name => "test") do |sheet|

input_array.each do |input_data|
...# covert input_data to row_data
sheet.add_row(row_data)
end
end
File.open("testfile", 'w') { |f| f.write(p.to_stream().read) }

我的 input_array 大小约为 400,000,因此工作表有 400,000 行,相当大。它卡在 p.to_stream().read .任何帮助都会很棒。谢谢。

最佳答案

看来我要开始关注了!
这是 randym(axlsx 的作者)

有几件事我想指出,应该可以帮助您完成所需的工作,好吧……完成了!

  • 如果您正在写入文件,请考虑 Package#serialize - 不是因为它更快,而是因为您需要维护的代码更少。

    p.serialize '文件名.xlsx'
  • 在过去的几周里,已经取得了重大的性能改进。请升级到1.1.1 gem 不再依赖RMagic,不再需要use_autowidth = false。

  • https://github.com/randym/axlsx

    大师的基准:
    Benchmarks w/40k rows:
    user system total real
    axlsx_noautowidth 68.130000 1.690000 69.820000 ( 80.257108)
    axlsx 61.520000 2.290000 63.810000 ( 78.187423)
    axlsx_shared 53.280000 1.170000 54.450000 ( 62.880780)
    axlsx_stream 52.110000 1.360000 53.470000 ( 61.980672)
    csv 10.670000 0.930000 11.600000 ( 14.901387)

    Benchmarks w/4k rows:
    user system total real
    axlsx_noautowidth 4.880000 0.120000 5.000000 ( 5.314383)
    axlsx 5.470000 0.110000 5.580000 ( 5.853739)
    axlsx_shared 5.720000 0.080000 5.800000 ( 6.135263)
    axlsx_stream 4.840000 0.090000 4.930000 ( 5.194801)
    csv 1.090000 0.090000 1.180000 ( 1.484763)

    这是基准测试文件:

    https://gist.github.com/2411144

    希望这可以帮助

    关于ruby-on-rails - xlsx 问题 : create excel sheet with large number of rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031756/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com