Exportar hoja de calculo (Excel) en Laravel 5.5

Excel en Laravel 5.5

Un sistema siempre debe tener la manera de exportar los datos para que gerencia o el dueño pueda analizar y tomar mejores decisiones corporativas, Excel es uno de esos formatos comunes porque luego podrías hacer gráficas y añadir formulas o cosas por el estilo. Aquí te enseñamos cómo con Laravel 5.5 puedes exportar archivos .xls


Seguimos con la filosofía del post anterior https://rimorsoft.com/generar-reportes-pdf-en-laravel-5-5 donde creamos un módelo, migración, seeder, factory y controlador... Sería interesante que lo vieras, hagas ese ejercicio y luego vuelvas para continuar con la instalación del paquete Excel:

¿Listo? ¡GENIAL! Entiendo que vienes del post anterior.

Instalación del paquete

Se llama maatwebsite/excel y los instalamos en Laravel 5.5 usando el comando composer require maatwebsite/excel

Luego las respectivas configuraciones en config/app.php

<?php

return [
    'providers' => [
        Maatwebsite\Excel\ExcelServiceProvider::class,
    ],

    'aliases' => [
        'Excel' => Maatwebsite\Excel\Facades\Excel::class,
    ],
];

Toma en cuenta que siempre que instalamos un paquete debemos dar de alta el Service Provider y el o los Facades en el archivo config/app.php.

Al tener listo la instalación y la configuración necesaria vamos directo a generar nuestro primer Excel.

Archivo de Rutas

Ubicación routes/web.php

<?php

Route::get('/', 'ProductController@index')->name('products');
Route::get('descargar-productos', 'ProductController@excel')->name('products.excel');

Controlador

<?php
namespace App\Http\Controllers;
use App\Product;
use Illuminate\Http\Request;

use Maatwebsite\Excel\Facades\Excel;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return view('products', compact('products'));
    }
    public function excel()
    {        
        /**
         * toma en cuenta que para ver los mismos 
         * datos debemos hacer la misma consulta
        **/
        Excel::create('Laravel Excel', function($excel) {
            $excel->sheet('Excel sheet', function($sheet) {
                //otra opción -> $products = Product::select('name')->get();
                $products = Product::all();                
                $sheet->fromArray($products);
                $sheet->setOrientation('landscape');
            });
        })->export('xls');
    }
}

Para usar con éxito la clase Excel debemos usar el Facade correcto, y lo incluimos al principio del documento de la siguiente manera use Maatwebsite\Excel\Facades\Excel;

En el código tengo la siguiente línea comentada $products = Product::select('name')->get(); con esto quiero hacerte ver otra forma de realizar una consulta, quiero decir que es posible generar un Excel con solo la columna, en este caso name de la tabla products. Puedes hacer en el futuro tus consultas personalizadas y listar solo las columnas que necesites.

En el método index() listamos los productos y los mostramos en una vista y en el método excel() generamos el documento .xls.

A continuación las vistas usadas en el proyecto.

Vistas

Archivo resources/views/layout.blade.php

<!doctype html>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

        <title>Laravel y data en Excel | Rimorsoft Online</title>

    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="col-xs-12">
                	@yield('content')
                </div>
            </div>
        </div>
    </body>
</html>

Archivo resources/views/products.blade.php

@extends('layout')

@section('content')
    <h1 class="page-header">Listado de productos</h1>
    <table class="table table-hover table-striped">
        <thead>
            <tr>
                <th>ID</th>
                <th>Producto</th>
                <th>Descripción</th>
                <th>Stock</th>
            </tr>                            
        </thead>
        <tbody>
            @foreach($products as $product)
            <tr>
                <td>{{ $product->id }}</td>
                <td>{{ $product->name }}</td>
                <td>{{ $product->description }}</td>
                <td class="text-right">{{ $product->stock }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
    <hr>
    <p>
        <a href="{{ route('products.excel') }}" class="btn btn-sm btn-primary">
            Descargar productos en Excel
        </a>
    </p>
@endsection

Archivo resources/views/pdf/produtcs.blade.php

@extends('layout')

@section('content')
    <table class="table table-hover table-striped">
        <thead>
            <tr>
                <th>ID</th>
                <th>Producto</th>
                <th>Descripción</th>
                <th>Stock</th>
            </tr>                            
        </thead>
        <tbody>
            @foreach($products as $product)
            <tr>
                <td>{{ $product->id }}</td>
                <td>{{ $product->name }}</td>
                <td>{{ $product->description }}</td>
                <td class="text-right">{{ $product->stock }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
@endsection

¿Se parece al post anterior donde generamos un PDF?, en realidad es la misma base... Solo que en aquel generamos un PDF y aquí generamos un documento EXCEL.

Recuerda que en Github tenemos todos nuestros códigos organizados y listos para su descarga y uso, este proyecto está úbicado en https://github.com/rimorsoft/Generar-EXCEL-en-Laravel-5.5 ¡Ve allá y haz FORK! :)

Deja siempre tu opinión, gracias por estar aquí...

Adquiere en preventa y aprovecha un gran descuento TDD en Laravel

Comparte en

Creado por: Venezuela Italo Morales

Profesor de #Laravel y #PHP en Rimorsoft Online

Más información


Ordenar tabla relacionada por id descendente

Hola, necesito usar el orderBy('id', 'DESC') en mi controlador pero no se como incorporarlo sin que me de error necesito que la tabla post se ordene por id descendente pero al ser una tabla relacionada no lo consigo

  public function show($id)
    {

        $product = Product::with('Dsa')->with('Post')->find($id);
        
  

        return view('products...

Carga de registros, con datatables

Sera que datatables no aguanta una cantidad de registro mayor a 1 millon. tengo problemas con esa parte las consultas de busquedas se toman mucho tiempo. alguien que mepueda apoyar en esa parte. ...

Controlador laravel modificar ruta path

Actualmente al subir una imagen con mi Controlador la guarda en una capeta llamada image situada en el directorio public y me gustaria que cuando suba una imagen dentro de la carpeta image cree una nueva carpeta dentro de image con el nombre del usuario y esta sea donde guarde las imagenes pero no consigo agregar esa variable al controlador me da error...

  public functi...

Muriendo a causa de SOAP

Soy nuevo en el uso de web service y en rimorsoft, sin embargo no tengo idea de como crear y que necesito para hacer un servidor soap en php alguien podria ayudarme/orientarme con una guia aunque esta sea pequeña sera bien agradecida...

Tengo un archivo XSD para trabajarlo pero repito, no tengo idea ni de como comenzar y trabajarlo, se que tengo que crear un server soap y d...