2013-03-14 22 views
7

我正在使用axlsx gem創建excel文件。我把它們作爲一個xlsx文件在我的項目主目錄中序列化。但我想要在我的Rails應用程序的公用文件夾中創建文件,或者直接由用戶下載而不保存在服務器中。我怎樣才能做到這一點?? 這裏是生成XLSX文件使用axlsx導出到公用文件夾

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 
+3

它的那麼簡單。只是說 p.serialize( '公共/ charts.xlsx') – mukesh 2013-03-14 06:21:36

回答

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發送給用戶,也可以將其保存到磁盤上的文件中。

+0

THX @fearpi。它的工作原理 – mukesh 2013-03-14 06:56:18

+2

這是我做過什麼:「outstrio = StringIO.new \t p.use_shared_strings =真 \t outstrio.write(p.to_stream.read) \t SEND_DATA outstrio.string,:文件名=> 「report.xlsx」 '' – mukesh 2013-03-14 09:10:50

+0

恐懼是正確的。謝謝! 除了@mukesh在磁盤中寫入文件。 文件= File.open( 「#{Rails.root} /tmp/temp.csv」, 'W') file.write outstrio.string – 2014-11-13 15:02:30

0

最後回答:您也可以使用axlsx_rails gem。它增加了一個模板處理程序axlsx,使它很容易生成和服務XLSX文件:

https://github.com/straydogstudio/axlsx_rails

它可以讓你把你所有的axlsx代碼視圖,用諧音。如果你在rails中做很多xlsx,它很方便。

當然,連載作品過於精細,或流作爲@fearpi提及。