2016-08-08 1 views
0

RailsCastに続いてhttp://railscasts.com/episodes/362-exporting-csv-and-excel?autoplay=true私はxlsのダウンロードをフォーマットしようとしていますが、私の下のコードではxlsファイルはフォーマットされませんが、データはなくファイルは開かれていません。Ruby on Rails:XLSをダウンロードするときにフォーマットが機能しないのはなぜですか?

Mime_types.rb

Mime::Type.register "application/xls", :xls 

Contacts_controller

def index 
    @contacts = Contact.where(user_id: session[:user_id]) 
    respond_to do |format| 
    format.html 
    format.csv { send_data @contacts.to_csv } 
    format.xls 
    end 
end 

Contactモデル:

def self.to_csv(options = {}) 
    CSV.generate(options) do |csv| 
    csv << column_names 
    all.each do |contact| 
     csv << contact.attributes.values_at(*column_names) 
    end 
    end 
end 

Index.xls.erb

<table border="1"> 
    <tr> 
    <th>Firstname</th> 
    <th>Surname</th> 
    <th>Email</th> 
    </tr> 
    <% @contacts.each do |contact| %> 
    <tr> 
    <td><%= contact.firstname %></td> 
    <td><%= contact.surname %></td> 
    <td><%= contact.email %></td> 
    </tr> 
    <% end %> 
</table> 

誰でもこの理由を教えてもらえますか?

私は、コントローラformat.xls { send_data @contacts.to_csv(col_sep: "\t") }にラインformat.xlsを交換するとき、それはは、XLSファイルをダウンロードしますが書式なしでないことに注意してくださいことができます。

答えて

0

(ただし、データはなく、ファイルは開いていません)。

おそらく、それは、スプレッドシートデータではなくhtml表を送信するということと関係していると思われます。 railscastでは、Ryanは代わりにXMLマークアップを生成します。それを試しましたか?

コントローラformat.xls {send_data @ contacts.to_csv(col_sep: "\ t")}の行format.xlsを置換すると、XLSファイルはダウンロードされますが、フォーマットは行われません。

実際には、何が起こるかは、あなたはCSVがは、XLSファイルであることををふり、そのファイルダウンロードすることですが、Excelはあなたに優しいことをしようと、それは渡すことができますされています。 CSVはデータのみの形式なので、フォーマットは行われません。そこに書式設定データを埋め込むことはできないので、Excelは何も取得しません。

"偽の"スプレッドシートを生成するのではなく、実際のものを生成することでより良い結果が得られ、Excelが正しく解釈することを期待します。例えば、axlsx gemをチェックしてください。

+0

最初に、RailsCastのRyanはHTMLテーブルを使用してExcelファイルをフォーマットしていますが、XMLマークアップを試しましたが、その結果破損したファイルになります。書式設定の問題について説明していただきありがとうございますが、私は今のところ宝石を通じてこれをしたくありません。 –

+0

@BenSmith:私は実際のキャストを見なかった、と認めます。 :)しかし、ビデオの下のテキストセクションでは、XMLバージョンのみです。 –

+0

@BenSmith:「私は宝石は欲しくない」 - ええ、私はそれを完全に得ています。私たちは3年後も同様の偽のxlsで管理しました。しかし結局は、本物のものを実装しなければなりませんでした。 –

関連する問題