ruby on rails - add_image - Rieles: exporta registros a un archivo de Excel descargable usando axlsx gem(Keep MVC)
axlsx rubyzip (5)
Establezca render false en HTML y evite JSON, use XLS y para rastrear, puede ver el terminal donde ha iniciado los rieles.
He instalado la gema axlsx con éxito desde https://github.com/randym/axlsx Aquí está el código de mi controlador que usé para crear un archivo excel a través de esta gema.
Pero nada sucede con este código, en cambio, me muestra un error mimo no inicializado
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
En segundo lugar, trato con este código:
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
Pero desafortunadamente, no funciona. ¿Alguien puede decirme que no insinúa una solución para hacer mi tarea?
He intentado por tercera vez según sugerencia:
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
Me arrojó error http 406
Para evitar el error de tipo mime sin inicializar, agregue el siguiente archivo:
# config/initializers/mime_types.rb
Mime::Type.register "application/xlsx", :xlsx
Y aquí hay un breve ejemplo de qué hacer para descargar el archivo 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
Trate de usar la gema axlsx_rails con plantilla. En mi caso utilicé la siguiente configuración para que funcione. y también un enlace con la extensión .xlsx para representarlo en formato xlsx.
ARCHIVO GEM
gem ''axlsx'', ''~> 2.0''
gem "axlsx_rails"
Controlador archivo-pagos_controller.rb
def download
@payments = Payment.all
respond_to do |format|
format.xlsx {render xlsx: ''download'',filename: "payments.xlsx"}
end
end
Ver archivo- 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
Yo uso gemas.
gem ''axlsx'', ''~> 2.0''
gem "axlsx_rails"
Pero estas gemas ocurrieron un error. Cuando elimino la gema ''rubyzip'' de Gemfile.lock, se solucionó el problema de bundle install
. Gracias.
gem ''axlsx'', ''~> 2.0''
gem "axlsx_rails"