此脚本的目的是将csv文件转换为一个xlsx文件我有33个csv文件,每个csv文件包含1229列289行,当我试图将所有这些csv文件读入一个xlsx文件时,出现了以下错误
cell_serializer.rb:138:在“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)
为了达到我想要的效果,我尝试了spreadsheed,它工作得很好,使用起来也很简单,但它只创建了.xls文件,其中不能包含超过256列。
任何避免命名错误的想法,请提前感谢您的帮助。
我的ruby版本是2.3.0p0
最佳答案
我把这些csv文件分成了2个以上的.xlsx文件,解决了这个问题。但最好我能把这些csv文件写进一个.xlsx文件中。
关于ruby-on-rails - 如何避免Axlsx gem无法分配内存(NoMemory Error)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39988925/