10

我正在使用 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
4

2 回答 2

4
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其提供给用户,也可以将其保存到磁盘上的文件中。

于 2013-03-14T06:20:40.787 回答
0

迟到的答案:您也可以使用 axlsx_rails gem。它为 axlsx 添加了一个模板处理程序,使得生成和提供 xlsx 文件变得非常容易:

https://github.com/straydogstudio/axlsx_rails

它允许您将所有 axlsx 代码放在视图中,并带有部分。如果你在 Rails 中做很多 xlsx,它很方便。

当然,序列化也可以正常工作,或者像@fearpi 提到的那样进行流式传输。

于 2013-07-27T03:10:03.710 回答