下载模板xls中的数据
Download of data in template xls
我想知道如何重定向到模板,并使用此模板下载它,我尝试了一些方法,使用我在 pdf 中的模板,但它不起作用。
这是我走了多远:
def download
@reversals = Reversal.where("created_at >= ? and created_at <= ?", params[:start_date], params[:end_date])
respond_to do |format|
format.xls {
send_data(:filename => 'estornos.xls', :disposition => 'attachment', :action => :index, :layout => false, :template => 'reversals/download.xls.erb', locals: {:reversals => @reversals})
}
end
end
这里在我看来调用:
<%= form_for :reversal, method: :post, url: download_reversals_path do %>
<%= date_select "reversal", "start_date" %>
<%= date_select "reversal", "end_date" %>
<%= submit_tag 'Download' %>
<% end %>
这是我的路线:
resources :reversals do
collection do
post 'download', :defaults => { :format => 'xls', :template => 'download.xls.erb'}
end
end
我已经在mime_type中输入了xls的类型。我已经安装了模板,但无法连接两者。模板与方法,同名
经过多次测试和时间我找到了如何做:
路线:
post 'reversals/download', to: "reversals#download_pdf", as: 'download', format: 'xls'
控制器:
def download_pdf
report_start_date= build_date_from_params("start_date", params[:reversal])
report_end_date= build_date_from_params("end_date", params[:reversal])
@reversals = Reversal.all.where("created_at >= ? and created_at <= ? or created_at = ? and created_at = ? ", report_start_date, report_end_date, report_start_date, report_end_date)
@start_date = report_start_date
@end_date = report_end_date
respond_to do |format|
format.html
format.xls {
response.headers['Content-Disposition'] = 'attachment; filename=" estornos-' + (Time.now).to_s + '.xls"'
render "download.xls.erb"
}
end
end
def build_date_from_params(field_name, params)
Date.new(params["#{field_name.to_s}(1i)"].to_i,
params["#{field_name.to_s}(2i)"].to_i,
params["#{field_name.to_s}(3i)"].to_i)
end
mime_types:
Mime::Type.register "application/xls", :xls
在我的索引视图中
<%= form_for :reversal, method: :post, url: download_path, format: 'xlsx' do %>
<table>
<tr>
<td>DATA DE LANÇAMENTO INICIAL:</td>
<td></td>
<td><%= date_select "reversal", "start_date" %></td>
<td rowspan="2" align="center"><%= submit_tag 'Download xlsx', class: 'btn btn-secundary' %></td>
</tr>
<tr>
<td>DATA DE LANÇAMENTO FINAL:</td>
<td></td>
<td><%= date_select "reversal", "end_date" %></td>
</tr>
</table>
<% end %>
如果你想下载到excel,xls格式不行,必须是xlsx,只需要在mime类型中注册xlsx格式,在视图中传入格式:xlsx,在路由 tb 中创建或更改格式为:xlsx 的路由。不要忘记使用 nameoffunction.xlsx.erb 创建视图。
我想知道如何重定向到模板,并使用此模板下载它,我尝试了一些方法,使用我在 pdf 中的模板,但它不起作用。 这是我走了多远:
def download
@reversals = Reversal.where("created_at >= ? and created_at <= ?", params[:start_date], params[:end_date])
respond_to do |format|
format.xls {
send_data(:filename => 'estornos.xls', :disposition => 'attachment', :action => :index, :layout => false, :template => 'reversals/download.xls.erb', locals: {:reversals => @reversals})
}
end
end
这里在我看来调用:
<%= form_for :reversal, method: :post, url: download_reversals_path do %>
<%= date_select "reversal", "start_date" %>
<%= date_select "reversal", "end_date" %>
<%= submit_tag 'Download' %>
<% end %>
这是我的路线:
resources :reversals do
collection do
post 'download', :defaults => { :format => 'xls', :template => 'download.xls.erb'}
end
end
我已经在mime_type中输入了xls的类型。我已经安装了模板,但无法连接两者。模板与方法,同名
经过多次测试和时间我找到了如何做:
路线:
post 'reversals/download', to: "reversals#download_pdf", as: 'download', format: 'xls'
控制器:
def download_pdf
report_start_date= build_date_from_params("start_date", params[:reversal])
report_end_date= build_date_from_params("end_date", params[:reversal])
@reversals = Reversal.all.where("created_at >= ? and created_at <= ? or created_at = ? and created_at = ? ", report_start_date, report_end_date, report_start_date, report_end_date)
@start_date = report_start_date
@end_date = report_end_date
respond_to do |format|
format.html
format.xls {
response.headers['Content-Disposition'] = 'attachment; filename=" estornos-' + (Time.now).to_s + '.xls"'
render "download.xls.erb"
}
end
end
def build_date_from_params(field_name, params)
Date.new(params["#{field_name.to_s}(1i)"].to_i,
params["#{field_name.to_s}(2i)"].to_i,
params["#{field_name.to_s}(3i)"].to_i)
end
mime_types:
Mime::Type.register "application/xls", :xls
在我的索引视图中
<%= form_for :reversal, method: :post, url: download_path, format: 'xlsx' do %>
<table>
<tr>
<td>DATA DE LANÇAMENTO INICIAL:</td>
<td></td>
<td><%= date_select "reversal", "start_date" %></td>
<td rowspan="2" align="center"><%= submit_tag 'Download xlsx', class: 'btn btn-secundary' %></td>
</tr>
<tr>
<td>DATA DE LANÇAMENTO FINAL:</td>
<td></td>
<td><%= date_select "reversal", "end_date" %></td>
</tr>
</table>
<% end %>
如果你想下载到excel,xls格式不行,必须是xlsx,只需要在mime类型中注册xlsx格式,在视图中传入格式:xlsx,在路由 tb 中创建或更改格式为:xlsx 的路由。不要忘记使用 nameoffunction.xlsx.erb 创建视图。