2016-08-08 69 views
0

Nach RailsCast http://railscasts.com/episodes/362-exporting-csv-and-excel?autoplay=true Ich versuche, den XLS-Download zu formatieren, aber mit meinem unteren Code formatiert er nicht die XLS-Datei, sondern öffnet nur Excel (ohne Daten und keine Datei geöffnet).Ruby on Rails: Warum funktioniert meine Formatierung beim Herunterladen von XLS nicht?

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 Modell:

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> 

Kann mir jemand den Grund dafür sagen?

Kann ich beachten Sie, dass, wenn die Linie format.xls in der Steuerung ersetzt format.xls { send_data @contacts.to_csv(col_sep: "\t") } es nicht die XLS-Datei herunterladen, aber ohne Formatierung.

Antwort

0

aber öffnet nur Excel (ohne Daten und keine Datei geöffnet).

Vielleicht hat es etwas mit der Tatsache zu tun, dass Sie eine HTML-Tabelle, keine Tabellendaten senden. Im Railscast generiert Ryan stattdessen ein XML-Markup. Hast du das versucht?

wenn die Linie format.xls in der Steuerung format.xls ersetzt {send_data @ contacts.to_csv (col_sep: "\ t")} es macht die XLS-Datei herunterladen, aber ohne Formatierung.

Eigentlich, was passiert, ist, dass Sie eine CSV-Datei herunterladen, die gibt vor, eine XLS-Datei zu sein, aber Excel versucht, Sie freundlich zu sein und lässt ihn passieren. Sie erhalten keine Formatierung, da CSV ein reines Datenformat ist. Es ist nicht möglich, dort Formatierungsdaten einzubetten, also holt Excel keine.

Sie erhalten bessere Ergebnisse beim Generieren der echten Sache, anstatt "falsche" Tabellen zu generieren und hoffen, dass Excel sie richtig interpretiert. Schauen Sie sich zum Beispiel axlsx gem an.

+0

Erstens, um 4:31 im RailsCast Ryan verwendet eine HTML-Tabelle, um die Excel-Datei zu formatieren, und ich habe versucht, die XML-Markierung, aber das Ergebnis in einer beschädigten Datei. Vielen Dank für die Erklärung des Formatierungsproblems, aber ich möchte das jetzt nicht durch ein Juwel machen. –

+0

@BenSmith: Ich habe die tatsächliche Besetzung nicht gesehen, ich gebe zu. :) Aber im Textteil des Videos gibt es nur die Xml-Version. –

+0

@BenSmith: "Ich will kein Juwel" - ja, ich verstehe das total. Wir haben es geschafft, 3 Jahre mit ähnlichen gefälschten xls zu bestehen. Aber am Ende mussten wir das Reale umsetzen. –