2014-06-05 5 views
28

axlsx gemini başarıyla kurdum https://github.com/randym/axlsx İşte bu kod aracılığıyla bir excel dosyası oluşturmak için kullandığım denetleyici kodum.Raylar - axlsx gem kullanarak indirilebilir excel dosyasına ihracat kayıtları (MVC'yi koruyun)

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 

Ama ne yazık ki, bu çalışmaz:

Ama hiçbir şey yerine bana

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 

İkincisi, ben bu kod ile deneyin bir hata başlatılmamış mim gösteren bu kodla olur. Herkes bana sadece görevimi yapmak için bir çözüm olmadığını söyler mi?

Ben öneri uyarınca üçüncü kez denediniz: Beni atılmış

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 

http 406 hatası

cevap

26

Şablonu ile axlsx_rails Gem kullanmayı deneyin. Benim durumumda, çalışmasını sağlamak için aşağıdaki yapılandırmayı kullandım. ve ayrıca xlsx biçiminde oluşturmak için .xlsx uzantılı bir bağlantı.

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

kontrolör GEM DOSYA dosya-payments_controller.rb

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

Görünüm 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

yığın almak için başka bir yol Teşekkürler Ammy, iyi çalışıyor. –

+1

Bu, excel'e dışa aktarma için en iyi seçenektir, MVC –

+0

Kaydedilmiş MIME zamanını çok fazla tutar. –

15

başlatılmamış mim türü hatası aşağıdaki dosya eklemek önlemek için:

# config/initializers/mime_types.rb 

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

Ve Burada xlsx dosyasını indirmek için kısa bir örnek:

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

4046 gösteren hata kodu yazılmıştır. –

+0

Daniel MIME kod ekledim hala 406 hatası var –

+0

@DineshSaini xlsx dosyası ile istediğiniz format nedir? Yanıt, XLSX olarak mı işlendi? Bize isteğin stacktraceini gösterebilir misin? – Daniel

2

Lütfen HTML'ye yanlış yazmayı ayarlayın ve bunun yerine JSS'yi kullanın ve izleme için, rayları başlattığınız terminali görebilirsiniz.

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

ROR 3.2.6'yı desteklemek için sürümün kilitlenmesi gerektiğinden –

0

Ben taşlar kullanın.

Ancak bu taşlar bir hata oluştu. Gemfile.lock öğesinden 'rubyzip' gemini çıkardığımda, bundle install sorunu çözüldü. Teşekkürler.

İlgili konular