我实际上可以生成一个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。
答案 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。