2017-07-30 49 views
0

我实际上可以生成一个excel并显示客户端的下载链接,但我也希望该文件保留在我的服务器中的项目文件夹中,我的代码是在我的项目文件夹中保存生成的excel与axlsx_rails

控制器

def generate_report 
    render xlsx: 'prueba',template: 'admin/client_reports/report_a.xlsx.axlsx', filename: "a.xlsx", disposition: 'inline', 
    xlsx_created_at: 3.days.ago, xlsx_author: "Elmer Fudd" 
end 

查看.xlsx.axlsx

wb = xlsx_package.workbook 

wb.add_worksheet(name: "A") do |sheet| 
    sheet.add_row ["Titulo", "Precio"] 
end 

我不知道如何保存在我的项目文件夹中生成的excel。

回答

0

很难说如果不知道你的应用程序,所以一个常见的选择来保存你的文件是通过使用文件管理解决方案,如Carrierwave。这意味着您需要创建一个新的模型,例如ExcelAttachments,它可以是belong_to :user。然后,您可以开始将文件保存在该模型上。

要做到这一点,您可能需要使用Tempfile类(谷歌它)并将您的AXLSX内容流式传输到它,并将文件返回到CW。 This答案可能是一个很好的开始。

0

如果你是总是保存文件,你可以欺骗,并把这个在您的xlsx.axlsx模板的结尾:

xlsx_package.serialize(file_name) 

或者,控制器可以将其渲染为字符串,然后投放字符串数据以及写入一个文件(未测试的代码):

data = render_to_string handlers: [:axlsx], formats: [:xlsx], template: 'admin/client_reports/report_a.xlsx.axlsx' 
File.open("/file/path/and/name.xlsx","w") {|f| f.write(data) } 
send_data data, filename: "prueba.xlsx", type: Mime[:xlsx], disposition: 'inline' 

您可能会或可能不会需要指定的,因为你的请求已经XLSX处理程序/格式。

相关问题