【发布时间】:2017-02-20 16:25:25
【问题描述】:
此脚本的目的是将 csv 文件转换为一个 xlsx 文件。我有 33 个 csv 文件,每个 csv 文件由 1229 列、289 行组成,而我试图将所有这些 csv 文件读入一个 xlsx 文件时出现以下错误
cell_serializer.rb:138:in 'value_serialization': 分配内存失败(NoMemoryError)
我认为一个文件太大而无法包含所有数据,所以我决定分成两个 .xlsx 文件,但我得到了同样的错误。以下是我正在使用的脚本。
require 'axlsx'
def csv_to_xlsx(xlsx_file_name,file_names,p)
file_names.each do | f |
i = 0
CSV.foreach(f) do |row|
if i == 0
p.workbook.add_worksheet(:name => File.basename(f)) do | sheet |
sheet.add_row row
end
elsif
p.workbook.sheet_by_name(File.basename(f)).add_row row
end
i = i+1
end
p.serialize(xlsx_file_name)
end
end
csv_files = Dir.glob("./csv_file/*")
file_count = 0
file_names1 = Array.new
file_names2 = Array.new
csv_files.each do | f |
file_count = file_count+1
if file_count < 16
file_names1 << f
elsif
file_names2 << f
end
end
package1 = Axlsx::Package.new
package2 = Axlsx::Package.new
csv_to_xlsx('./xls_file/data01.xlsx',file_names1,package1)
csv_to_xlsx('./xls_file/data02.xlsx',file_names2,package2)
为了实现我想要的,我尝试了电子表格,它工作得很好而且使用简单,但它只创建不能包含超过 256 列的 .xls 文件。
任何避免 NoMemory 错误的想法,感谢您提前提供帮助。
我的 ruby 版本是 2.3.0p0
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 rubygems