2014-06-05 9 views
28

Ho installato con successo axlsx gem da https://github.com/randym/axlsx Ecco il mio codice controller che ho usato per creare un file excel attraverso questa gemma.Rails - Esportare i record in file excel scaricabili utilizzando axlsx gem (Keep MVC)

Ma nulla accade con questo codice invece mi mostra un mimo non inizializzato errore

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 

In secondo luogo, io cerco con questo codice:

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 

Ma, purtroppo, non funziona. Qualcuno può dirmi solo suggerimento non una soluzione per svolgere il mio compito?

ho cercato volte terzi, come da suggerimento:

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 

Mi gettato http 406 errore

risposta

26

Prova con axlsx_rails Gemma con modello. Nel mio caso ho usato sotto la configurazione per farlo funzionare. e anche un collegamento con estensione .xlsx per renderlo in formato xlsx.

GEM FILE

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

controller di file- payments_controller.rb

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

View 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

Grazie Ammy, funziona bene. –

+1

Questa è la migliore opzione per esportare in Excel, mantiene MVC –

+0

Tempo mimo salvato così tanto. –

15

Per evitare l'errore tipo MIME non inizializzato aggiungere il seguente file:

# config/initializers/mime_types.rb 

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

E Ecco un breve esempio di cosa fare per scaricare il file xlsx:

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

Il codice di errore 4046 è stato scritto in questione. –

+0

Daniel Ho aggiunto il codice in MIME hanno ancora errore 406 –

+0

@DineshSaini qual è il formato con cui stai richiedendo il file xlsx? La risposta è elaborata come XLSX? Puoi mostrarci lo stacktrace della richiesta? – Daniel

2

Si prega di impostare il rendering false su HTML ed evitare JSON invece di utilizzare XLS e per la traccia, è possibile vedere il terminale in cui sono state avviate le guide.

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

Giusto perché è necessario bloccare la versione per supportare ROR 3.2.6 –

0

io uso gemme.

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

Ma queste gemme si sono verificate un errore. Quando rimuovo la gemma "rubyzip" da Gemfile.lock, il problema bundle install è stato risolto. Grazie.