rails excel mime-type – 如何更改默认文件名?

我按照http://railscasts.com/episodes/362-exporting-csv-and-excel进行操作,并在我的Rails应用程序中设置了Excel下载。

我的控制器代码如下所示:

def show @project = Project.find(params[:id]) @project.tasks.order(:name) respond_to do |format| format.html format.json { render json: @project } format.xls end end 

在我看来,我创建了下载excel文件的链接,如下所示:

 .dl_xls= link_to "Download xls", url_for(:format => 'xls') 

现在生成的excel文件总是被命名为Project记录的id,例如80.xls

有没有办法改变这种行为并给它一个自定义名称?

谢谢..

我相信你的答案就在这里: 在rails中,如何将记录作为csv文件返回

使用标头设置文件名。

 headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 
 def index @tabulars = Tabular.all filename = "data_users.xls" respond_to do |format| format.html format.xls { headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" } end end 

此链接更多细节更改文件名excel

我希望你实际看到的是视图名称sans .erb,不一定是控制器动作。

如果你想要那种控制水平,你可以做三件事。

  • 使用来自控制器的send_data调用,使用制表符分隔数据,如使用filename:选项转换的轨道中所示

例如

 class ProductsController < ApplicationController def index @products = Product.order(:name) respond_to do |format| format.html format.csv { send_data @products.to_csv } format.xls { send_data @products.to_csv(col_sep: "\t"), filename: 'your_file_name.xls'} end end end 

这种方法存在问题以及railscast引入的旧的适当的电子表格语言,但如果您的用户群被锁定在MS-OFFICE,我认为没有人会注意到。

  • 或者,您可以使用使用axlsx gem的acts_as_xlsx或axlsx_rails之类的gem。 这些工具生成经过validation的xlsx数据(也称为Office Open XML / ECMA-376 - 或MS自2007年以来一直使用的...),并且与其他现代电子表格软件(如Numbers,GoogleDocs,LibraOffice)具有相当好的互操作性。 我相信你在railscast中注意到了与此相关的所有评论。

我知道,因为我是作者或axlsx,以及那些限制,缺乏样式,图表和validation,这些都是我开始创作axlsx的原因。

更多信息:axlsx: https : //github.com/randym/axlsx

acts_as_xlsx: http : //axlsx.blogspot.jp/2011/12/using-actsasxlsx-to-generate-excel-data.html

  • 编写自己的响应者/渲染器

axlsx_rails也是如何创建自己的渲染器和响应器的一个很好的示例,以便您可以使用标准的rails视图,但重命名下载的文件。

https://github.com/straydogstudio/axlsx_rails/blob/master/lib/axlsx_rails/action_controller.rb