此脚本的目的是将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/

10-13 04:44