2014-06-05 2 views
28

Ich habe die Axlsx Edelstein erfolgreich installiert von https://github.com/randym/axlsx Hier ist mein Controller-Code, den ich verwendet, um eine Excel-Datei durch dieses Juwel zu erstellen.Rails - Export Datensätze in herunterladbare Excel-Datei mit Axlsx Edelstein (Keep MVC)

aber nichts mit diesem Code passieren, anstatt es zeigt mir ein Fehler nicht initialisierten Mime

class Coaches::PaymentsController < ApplicationController 

    before_filter :authenticate_coach! 

    # List all the payments 
    def index 
    if !params[:sort].blank? 
     @payments = Payment.includes(:member).paginate(:page => params[:page], :order => sort_column + " " + sort_direction) 
    else 
     @payments = Payment.includes(:member).paginate(:page => params[:page], :order=>'id desc') 
    end 
    respond_to do |format| 
     format.html 
     # Change format to xlsx 
     format.xlsx 
     format.json { render json: @payments } 
    end 
    end 
end 

Zweitens habe ich mit diesem Code versuchen:

wb = xlsx_package.workbook 
wb.add_worksheet(name: "Buttons") do |sheet| 
    @buttons.each do |button| 
    sheet.add_row [button.name, button.category, button.price] 
    end 
end 

Aber leider funktioniert es nicht. Kann mir jemand nur einen Tipp geben, keine Lösung um meine Aufgabe zu erledigen?

Ich habe als pro Vorschlag dritten Mal versucht:

def index 
    if !params[:sort].blank? 
     @payments = Payment.includes(:member).paginate(:page => params[:page], :order => sort_column + " " + sort_direction) 
    else 
     @payments = Payment.includes(:member).paginate(:page => params[:page], :order=>'id desc') 
    end 
    respond_to do |format| 
     format.xlsx do 
     p = Axlsx::Package.new 
     wb = p.workbook 
     wb.add_worksheet(name: "Your worksheet name") do |sheet| 
      sheet.add_row ["First Column", "Second", "Third"] 
      sheet.add_row [1, 2, 3] 
      sheet.add_row [' preserving whitespace'] 
     end 
     send_data p.to_stream.read, type: "application/xlsx", filename: "filename.xlsx" 
     end 
    end 
    end 

Es hat mich geworfen http 406 Fehler

Antwort

26

Versuchen Sie mit axlsx_rails Gem mit Vorlage. In meinem Fall habe ich unter Konfiguration verwendet, damit es funktioniert. und auch eine Verknüpfung mit der Erweiterung .xlsx, um sie im xlsx-Format zu rendern.

GEM FILE

gem 'axlsx', '~> 2.0' 
gem "axlsx_rails" 

Controller File- payments_controller.rb

def download 
    @payments = Payment.all 
    respond_to do |format| 
     format.xlsx {render xlsx: 'download',filename: "payments.xlsx"} 
    end 
end 

Ansicht File- download.xlsx.axlsx

wb = xlsx_package.workbook 
wb.add_worksheet(name: "Payments") do |sheet| 
    sheet.add_row ["ID", "Notes","Amount($)","Deposit Date"] 
    @payments.each do |payment| 
     sheet.add_row [payment.id, payment.notes,payment.amount,payment.date_deposite] 
    end 
end 
+2

Danke Ammy, es funktioniert gut. –

+1

Dies ist die beste Option für den Export nach Excel, hält MVC –

+0

Saved Pantomime Zeit so sehr. –

15

die nicht initialisierten Mime-Typ Fehler fügen Sie die folgende Datei zu verhindern:

# config/initializers/mime_types.rb 

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

Und Hier ist ein kurzes Beispiel für das Herunterladen der xlsx-Datei:

format.xlsx do 
    p = Axlsx::Package.new 
    wb = p.workbook 
    wb.add_worksheet(name: "Your worksheet name") do |sheet| 
    # Add your stuff 
    end 
    send_data p.to_stream.read, type: "application/xlsx", filename: "filename.xlsx" 
end 
+0

Anzeige 4046 Fehlercode wird in Frage geschrieben. –

+0

Daniel Ich habe Code in Mime hinzugefügt noch haben 406 Fehler –

+0

@DineshSaini in welchem ​​Format fordern Sie die Xlsx-Datei mit? Wird die Antwort als XLSX verarbeitet? Können Sie uns den StackTrace der Anfrage zeigen? – Daniel

2

Setzen Sie render false auf HTML und vermeiden Sie, dass JSON stattdessen XLS verwendet, und für die Ablaufverfolgung können Sie das Terminal sehen, an dem Sie die Schienen gestartet haben.

2
gem 'axlsx', '~> 2.0' 
gem "axlsx_rails" 
+0

Richtig, weil die Version gesperrt werden muss, um ROR 3.2.6 zu unterstützen –

0

I Edelsteine.

gem 'axlsx', '~> 2.0' 
gem "axlsx_rails" 

Aber diese Edelsteine ​​traten einen Fehler auf. Wenn ich "Rubyzip" Gem aus Gemfile.lock entfernen, dann bundle install Problem wurde gelöst. Danke.

Verwandte Themen