我正在使用axlsx gem来创建excel文件。我将它们作为xlsx文件在我的项目主目录中序列化。但是我想在我的rails应用程序的公共文件夹中创建文件,或者用户可以直接下载该文件而不将其保存在服务器中。我怎样才能做到这一点?? 这是生成xlsx文件的控制器
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
答案 0 :(得分:5)
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
这将产生xls文件的文件内容。然后,您可以send_data
向用户提供,或将其保存到磁盘上的文件中。
答案 1 :(得分:0)
迟到的回答:您也可以使用axlsx_rails gem。它为axlsx添加了一个模板处理程序,使生成和提供xlsx文件非常容易:
https://github.com/straydogstudio/axlsx_rails
它允许您将所有axlsx代码放入视图中,并使用partials。如果你在轨道上做了很多xlsx,它很方便。
当然,序列化也可以正常工作,或者像@fearpi所提到的那样流式传输。