4

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

この動作を変更してカスタム名を付ける方法はありますか?

ありがとうございました..

4

3 に答える 3

25

私はあなたの答えがここにあると信じています:レールでは、レコードをcsvファイルとして返す方法

ヘッダーを使用してファイル名を設定します。

headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 
于 2012-07-24T10:13:11.863 に答える
7
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

于 2013-05-19T00:58:19.247 に答える
2

実際に表示されているのは、ビューsans .erbの名前であり、必ずしもコントローラーアクションではないことを期待しています。

そのレベルの制御が必要な場合は、3つの方法があります。

  • filename:オプションでキャストされたレールに示されているように、タブで区切られたデータを使用して、コントローラーからのsend_data呼び出しを使用します。

例えば

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で導入された古い適切なspreadsheetML言語には問題がありますが、ユーザーベースがMS-OFFICEに固定されている場合、誰も気付かないと思います。

  • または、axlsxgemを使用するacts_as_xlsxやaxlsx_railsなどのgemを使用することもできます。これらのツールは、検証済みのxlsxデータ(Office Open XML / ECMA-376とも呼ばれます-またはMSがOffice2007以降使用しているもの...)を生成し、Numbers、GoogleDocs、LibraOfficeなどの他の最新のスプレッドシートソフトウェアとの相互運用性がかなり良好です。Railscastでこれに関連するすべてのコメントに気づいたと思います。

私は著者またはaxlsxであり、それらの制限と、そもそも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

于 2012-07-24T10:12:54.337 に答える