Search code examples
ruby-on-railsaxlsx

export to public folder using axlsx


I am using the axlsx gem to create excel files. I get them serialized in my project home directory as an xlsx file. But I want the file to be created in the public folder of my rails app, or directly downloadable by the user without saving it in the server. How can I do this?? Here is the controller that generates the xlsx file

def export_excel
    p = Axlsx::Package.new
    wb = p.workbook 
    wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
    (1..10).each { |label| sheet.add_row [label, rand(24)+1] }
    sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A14", :end_at => "F24") do |chart|
        chart.add_series :data => sheet["B1:B10"], :labels => sheet["A1:A10"], :title => sheet["A1"]
    end
  end
  p.serialize('charts.xlsx')    

end

Solution

  • p = Axlsx::Package.new
    # ...
    outstrio = StringIO.new
    p.use_shared_strings = true # Otherwise strings don't display in iWork Numbers
    outstrio.write(p.to_stream.read)
    outstrio.string
    

    This will yield the file contents of the xls file. Then you can either send_data it to the user, or save it to a file on disk.