我正在用axlsx_rails gem生成xlsx文件。
在收集用户输入后,我将将数据发布到/basic_report_post.xlsx
控制器动作看起来就像
def basic_report_post
@config = params[:config]
@data = params[:data]
@filename = "#{Rails.root}/public/test.xlsx"
respond_to do |format|
format.xlsx {
render xlsx: 'basic_report_post'
}
end
end此操作basic_report_post.xlsx.axlsx的视图文件
wb = xlsx_package.workbook
wb.add_worksheet(name: 'Data1') do |s|
# Drawing columns
end
xlsx_package.serialize @filename我的问题是,我正在获取响应数据(在成功后的操作中),这是原始的.xlsx文件。但是我需要以某种方式响应@filename (格式json/html),然后下载它。
发布于 2014-06-10 16:27:46
可以使用axlsx_rails模板呈现程序创建字符串并将其保存到文件中:
def basic_report_post
@config = params[:config]
@data = params[:data]
@filename = "#{Rails.root}/public/test.xlsx"
File.open(@filename, 'w') do |f|
f.write render_to_string(handlers: [:axlsx], formats: [:xlsx], template: 'path/to/template')
end
render json: {name: @filename}
end然后,如果需要,可以使用模板直接为文件提供服务。
发布于 2014-05-15 22:48:15
在对respond_to进行了一些实验之后,我将.xlsx生成逻辑移动到查看助手。
因此,我在控制器中包括了BasicReportHelper。
basic_report_helper.rb
module BasicReportsHelper
def generate_basic_report(filename)
p = Axlsx::Package.new
wb = p.workbook
wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
# Drawing here
end
p.serialize filename
end
end更改对/basic_report_post.json的post调用并将操作更改为
def basic_report_post
@config = params[:config]
@data = params[:data]
@filename = "#{Rails.root}/public/test.xlsx"
generate_basic_report(@filename)
respond_to do |format|
format.json {
render json: {name: @filename}
}
end
endhttps://stackoverflow.com/questions/23689472
复制相似问题