laravel-excelLas hojas de cálculo son perfectas para estudios financiero, contables, estadísticos, entre otros. En esta primera entrada sobre el manejo de archivos Excel con Laravel quiero explicar como podemos exportar una tabla con toda su información, de forma sencilla y útil con el complemento Laravel-Excel.

Primero que nada instalar el complemento, agregando el paquete al archivo composer.json:

"maatwebsite/excel": "~2.0"

En este tutorial también vamos a necesitar el complemento Faker. Si no lo tienes instalado, puedes agregar el paquete también antes de actualizar composer. Para cualquier duda ir a la lección: Seeders y el componente Faker en Laravel 5

seguidamente, actualizamos composer en la consola:

composer update

Agregamos el Provider de Excel en config/app.php:

'Maatwebsite\Excel\ExcelServiceProvider',

y el alias:

'Excel' => 'Maatwebsite\Excel\Facades\Excel',

Por último, generamos el archivo de configuración de Excel. En la consola:

php artisan vendor:publish

Bien, ya tenemos los componentes instalados y listos para usar.

Generar código que se va a exportar con Faker

Vamos a crear datos de prueba para poder exportarlos, voy a utilizar como ejemplo una tabla de productos muy sencilla. Para ello comencemos con crear el modelo:

php artisan make:model -m Product

Con la opción -m, este comando genera automáticamente la migración.

Modifiquemos la migración:

	public function up()
	{
		Schema::create('products', function(Blueprint $table)
		{
			$table->increments('id');
            $table->string('name');
            $table->mediumText('description');
            $table->integer('serial')->unsigned();
            $table->integer('quantity')->unsigned();
			$table->timestamps();
		});
	}

Modifiquemos el seeder:

<?php

use Illuminate\Database\Seeder;
use Faker\Factory as Faker;
use Illuminate\Support\Str as Str;

class ProductTableSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $faker = Faker::create();

        for($i = 0; $i<30; $i++){

            \DB::table('products')->insert(array(
                'name'         => $faker->name,
                'description'  => $faker->paragraph(),
                'serial'       => $faker->numberBetween(54826571,95653254),
                'quantity'     => $faker->numberBetween(0,1000)
            ));
        }
    }
}

y coloquemos el llamado al seeder en DatabaseSeeder.php:

$this->call('ProductTableSeeder');

Para continuar, debes tener configurada la base de datos en el archivo .env de tu aplicación.

Ahora bien, vamos a ejecutar la migración con los seeders:

php artisan migrate --seed

Si no encontró tu archivo seed, intenta en la consola con:  composer dump-autoload 

Muy bien, la información de los productos ha sido generada, ahora necesitamos el controlador para exportar los datos:

php artisan make:controller ExcelController

Modificamos la función index  del controlador y  coloquemos la implementación al modelo Product y la del complemento Excel:

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Product;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;


class ExcelController extends Controller {

	/**
	 * Display a listing of the resource.
	 *
	 * @return Response
	 */
	public function index()
	{

        Excel::create('Laravel Excel', function($excel) {

            $excel->sheet('Productos', function($sheet) {

                $products = Product::all();

                $sheet->fromArray($products);

            });
        })->export('xls');

	}
}

y por supuesto, agregamos la ruta del controlador:

Route::resource('excel','ExcelController');

Vamos a probar, dirígete a la ruta:   nombre_de_tu_aplicacion.app/excel y se debe desplegar una pantalla para descargar tu archivo (Esto puede tardar un momento). Perfecto, revisemos el documento a ver que tal:

excel

Excelente, ya tienes un útil documento Excel con todo el contenido de la tabla.

Tip: Recuerda que puedes utilizar todas las funciones del ORM, como por ejemplo si no quieres exportar las columnas created_at ni update_at, sería:

$products = Product::select('id','name','description','serial','quantity')->get();

¿Qué te ha parecido?. Recuerda dejar tu opinión en la sección de comentarios o compartir el post en tus redes sociales.

Lecciones recomendadas:

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Sistema de pagos en Laravel 5 con Cashier y Stripe Lección siguiente Autenticación en Laravel 5 con Eloquent OAuth y Facebook