Hola cibernautas, como la están pasando en domingo? Por aquí es día de lluvia asi que aprovecho para dejarles unos cuantos recortes de código para que generen reportes en excel.
Es un paso a paso fácil de seguir e implementar. Previamente claro recomiendo que tengas ya un proyecto aunque sea pequeño para que puedas aplicar el código que te dejo. Y evidentemente que tengas ciertos conocimientos de Ruby / Ruby on rails.
Quizá te ayude a prender más: Ruby para principiantes, instalación en ubuntu + RVM
Bueno, utilizaremos la gema “axlsx”, aquí la documentación para trastear más: https://github.com/randym/axlsx
Paso 1.- Colocamos en el archivo Gemfile de nuestro proyecto, la gema “axlsx_rails“
# Use sqlite3 as the database for Active Record gem 'sqlite3' #Otras gemas arriba ... gem 'axlsx_rails' #Otras gemas abajo ... gem 'sass-rails', '~> 5.0'
Acto seguido vamos a la linea de comandos, nos ubicamos en la ruta principal de nuestro proyecto y ejecutamos:
> bundle install
Esto instalará la gema para que funcione en el proyecto, toma unos segundos. Asi que no desperen y revizar si el internet va bien si esque responde un poco lento.
Paso 2.- En el controlador realizamos la consulta de datos que queremos mostrar en la hoja de cálculo.
Para el ejemplo, voy a listar registros de la tabla: Personal.
class PersonalController < ApplicationController def xls_report @personal = Personal.all #La variable @personal contiene a la lista del personal de una empresa x. end end
Paso 3.- Generamos la plantilla que va a renderizar a la hoja de cálculo.
wb = xlsx_package.workbook wb.styles do |s| header_cell = s.add_style bg_color: "EFEFEF", fg_color: "00", sz: 14, alignment: { horizontal: :center } wb.add_worksheet(name: "lista-personal") do |sheet| sheet.add_row ["ID", "Nombre", "Apellidos", "Cargo"], :style => [header_cell, header_cell, header_cell, header_cell] @query_sorted.each do |t| sheet.add_row [t[:id], t[:first_name], t[:last_name], t[:role]] end end end
Paso 4.- Asignamos la plantilla a nuestro controlador.
class PersonalController < ApplicationController def xls_report @personal = Personal.all #En la siguiente linea, indicamos que plantilla usará el #controlador para pintar la data render xlsx: 'personal-list-report', template: 'reports/personal_list.xlsx.axlsx' end end
Paso 5.- Ubicamos nuestra vista en las rutas de Rails
Rails.application.routes.draw do root 'summer#index' get 'reports/personal.xls', to: 'personal#xls_report' end
Listo, con estos pasos y algo más de su experiencia podrán generar archivos en excel con Ruby on rails.
Espero que les sea útil y bueno me despido, gracias.
Colofón
Y que paso con los estilos en la hoja de calculo? Y los colores? Celdas con fondo y más bla bla bla.
Lo sé. Quieren la solución de un sólo clic, pero eso ya lo dejo para otro articulo asi que por ahora pueden trastear en más en la documentación. https://github.com/randym/axlsx