Ruby on rails 使用axlsx导出到公用文件夹

Ruby on rails 使用axlsx导出到公用文件夹,ruby-on-rails,axlsx,Ruby On Rails,Axlsx,我正在使用axlsx gem创建excel文件。我在我的项目主目录中将它们序列化为xlsx文件。但我希望该文件在rails应用程序的公用文件夹中创建,或者用户可以直接下载,而无需将其保存在服务器中。我该怎么做?? 这是生成xlsx文件的控制器 def export_excel p = Axlsx::Package.new wb = p.workbook wb.add_worksheet(:name => "Basic Worksheet") do |sheet|

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

这将生成xls文件的文件内容。然后,您可以
将数据发送给用户,或者将其保存到磁盘上的文件中。

后期回答:您也可以使用axlsx\u rails gem。它为axlsx添加了一个模板处理程序,使生成和提供xlsx文件变得非常容易:

它允许您将所有axlsx代码放在视图中,并带有片段。如果您正在rails中执行大量xlsx,那么它非常方便


当然,serialize也可以很好地工作,或者像@fearpi提到的那样流式处理。

很简单。只要说p.serialize('public/charts.xlsx')这就是我所做的:'outstrio=StringIO.new p.use_shared_strings=true outstrio.write(p.to_stream.read)send_data outstrio.string,:filename=>“report.xlsx”是正确的。谢谢除了@mukesh,还可以在磁盘中写入文件。file=file.open(“#{Rails.root}/tmp/temp.csv,'w')file.write outstrio.string
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