سؤال

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
هل كانت مفيدة؟

المحلول

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.

نصائح أخرى

Late answer: You could also use the axlsx_rails gem. It adds a template handler for axlsx, making it very easy to generate and serve xlsx files:

https://github.com/straydogstudio/axlsx_rails

It lets you put all your axlsx code in views, with partials. If you are doing lots of xlsx in rails, it is handy.

Of course, serialize works fine too, or to stream as @fearpi mentioned.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top