Rails - exporter des enregistrements vers un fichier Excel téléchargeable en utilisant axlsx gem (Keep MVC)

J'ai installé la gemme axlsx avec succès à partir de https://github.com/randym/axlsx Voici mon code de contrôleur que j'ai utilisé pour créer un fichier excel à travers cette gemme.

Mais rien ne se passe avec ce code à la place, il me montre une erreur MIME non initialisé

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

Deuxièmement, j'essaie avec ce code:

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

Mais malheureusement, cela ne fonctionne pas. Quelqu'un peut-il me dire seulement allusion pas une solution pour faire ma tâche?

J'ai essayé troisièmes fois selon suggestion:

   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

Il m'a jeté l'erreur http 406

26
demandé sur Dinesh Saini 2014-06-05 11:14:05

5 réponses

Essayez d'utiliseraxlsx_rails Gem avec template. Dans mon cas, j'ai utilisé la configuration ci-dessous pour le faire fonctionner. et aussi un lien avec l'extension .xlsx pour le rendre au format xlsx.

FICHIER GEM

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

Fichier du contrôleur-payments_controller.rb

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

Voir le fichier-Télécharger.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
27
répondu Ammy T 2014-06-17 04:45:45

Pour éviter l'erreur de type MIME non initialisée, ajoutez le fichier suivant:

# config/initializers/mime_types.rb

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

Et voici un petit exemple de ce qu'il faut faire pour télécharger le fichier 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
17
répondu Daniel 2014-06-05 08:23:35

Veuillez définir render false EN HTML et éviter JSON à la place utiliser XLS et pour trace, vous pouvez voir le terminal où vous avez démarré les rails.

2
répondu user3735287 2014-06-12 18:15:59
gem 'axlsx', '~> 2.0'
gem "axlsx_rails"
2
répondu Avtar Singh 2015-08-18 10:21:18

J'utilise des pierres précieuses.

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

Mais ces gemmes se sont produites une erreur. Quand je supprime' rubyzip ' gem de Gemfile.verrouiller , puis bundle install problème a été résolu. Grâce.

0
répondu murat 2016-12-27 22:17:11