24

このSpreadsheet gem を使用して xls ファイルをエクスポートしています。

コントローラーに次のコードがあります。

def export
  @data = Data.all

  book = Spreadsheet::Workbook.new
  sheet = book.create_worksheet :name => "data"

  contruct_body(sheet, @data)

  book.write "data.xls"
end

このようにして、データを入力し、ルート ディレクトリに保存できます。

しかし、保存する代わりにダウンロードしたいのです。ユーザーがローカル ディレクトリを選択してファイルを保存するように求めるように、コードを変更するにはどうすればよいでしょうか。(サーバー側にコピーを保存しない方が良い)

助けてください!

4

4 に答える 4

52

次のように、ローカル ファイルとしてまったく保存せずにブラウザに送信できます。

spreadsheet = StringIO.new 
book.write spreadsheet 
send_data spreadsheet.string, :filename => "yourfile.xls", :type =>  "application/vnd.ms-excel"
于 2010-11-02T16:41:17.650 に答える
2

このコードを試すことができます

book.write "data.xls"

send_file "/path/to/data.xls", :type => "application/vnd.ms-excel", :filename => "data.xls", :stream => false

# and then delete the file

File.delete("path/to/data.xls")

に渡す:stream => falsesend_file、Rails はストリーミングの前にファイル全体をメモリにコピーするように指示されます。ダウンロードの完了を待たずにすぐに戻るため、File.delete直後に使用してsend_fileも問題ありません。send_fileそうは言っても、非常に大きなファイルでは、使用可能なメモリの量によっては、メモリのボトルネックが発生する場合があります。

HTH

于 2010-10-29T09:57:58.817 に答える
0

ケースは私の体に起こります。remote::true による ajax リクエストを使用して Excel ファイルをエクスポートしましたが、ブラウザには何も表示されず、コンソールにエラー メッセージが表示されませんでした。フォームからリモート パラメータを削除すると、うまく機能します。

于 2013-07-26T10:24:58.033 に答える