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
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
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
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.
gem 'axlsx', '~> 2.0'
gem "axlsx_Rails"
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.