使用axlsx_rails将生成的excel保存在我项目的文件夹中

时间:2017-07-30 01:36:40

标签: ruby-on-rails excel xlsx axlsx

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

控制器

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。

2 个答案:

答案 0 :(得分:0)

在不知道您的应用程序的情况下很难说,因此保存文件的一个常见选项是使用像Carrierwave这样的文件管理解决方案。这意味着您需要创建一个新模型,例如ExcelAttachments,可以belong_to :user。然后,您可以开始在该模型上保存文件。

为此,您可能必须使用Tempfile类(google it)并将AXLSX内容流式传输到其中,然后将文件返回到CW。 This回答可能是一个很好的起点。

答案 1 :(得分: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。