web-dev-qa-db-de.com

Rails - Exportiere Datensätze in eine herunterladbare Excel-Datei mit axlsx gem

Ich habe den axlsx gem erfolgreich von https://github.com/randym/axlsx .__ installiert. Hier ist mein Controller-Code, den ich zum Erstellen einer Excel-Datei durch diesen Edelstein verwendet habe.

Aber mit diesem Code passiert nichts, stattdessen zeigt es mir einen Fehler an, der nicht initialisiert wurde 

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 versuche ich mit diesem 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

Aber leider funktioniert es nicht. Kann mir jemand sagen, nur einen Hinweis auf keine Lösung für meine Aufgabe?

Ich habe das dritte Mal gemäß Vorschlag gemacht:

   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 http 406 Fehler geworfen

27
Dinesh Saini

Versuchen Sie es mit axlsx_Rails Gem mit template ..__ In meinem Fall habe ich die folgende Konfiguration verwendet, damit es funktioniert. und auch einen Link mit der Erweiterung .xlsx, um ihn im xlsx-Format darzustellen.

GEM-DATEI

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

controller-Datei-payment_controller.rb

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

Datei anzeigen-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
29
Ammy T

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

# config/initializers/mime_types.rb

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

Und hier ist ein kurzes Beispiel, wie Sie die xlsx-Datei herunterladen können:

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
18
Daniel

Setzen Sie Render false auf HTML und vermeiden Sie, dass JSON statt XLS verwendet wird. Für die Ablaufverfolgung können Sie das Terminal sehen, an dem Sie die Rails gestartet haben.

2
user3735287
gem 'axlsx', '~> 2.0'
gem "axlsx_Rails"
2
Avtar Singh

Ich benutze Edelsteine. 

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

Bei diesen Edelsteinen ist jedoch ein Fehler aufgetreten. Wenn ich 'rubyzip' aus Gemfile.lock entferne, wurde bundle install-Problem gelöst Danke.

0
murat