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.
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.
Ubicación routes/web.php
<?php
Route::get('/', 'ProductController@index')->name('products');
Route::get('descargar-productos', 'ProductController@excel')->name('products.excel');
<?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 casoname
de la tablaproducts
. 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.
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
Hola,
Necesito de su ayuda estoy tratando que un request valide un registro para que no sea repetido, este esta compuesto por tres llaves foraneas(instituto_id, carrera_id, campus_id). les dejo el request: ```php return [ 'instituto_id' => 'required|numeric|min:1', 'carrera_id' => 'required|numeric|min:1', ...
el auth de laravel trabaja basado en tokens o con el objeto session de php ...
Buenas a todos, tengo un problema, ultimamente, cada vez que creo un nuevo proyecto de Laravel las rutas de este no funcionan. Por ejemplo: si creo el proyecto, éste se crea, pero al agregarle el sistema de autenticación: "auth" se generan tanto las rutas en el archivo web.php y las vistas. pero si intento acceder a la sección de registro o inicio de sesión me aparece el e...
Hola, tengo una consulta por hacer. Quisiera conocer sus opiniones, sobre como mostrar los errores de validación con ajax cuando utlizo la clase Form Request. Debo decir que el mensaje de registrado con éxito si lo muestra, sin embargo los mensajes de error no los he podido mostrar. Gracias
//FORM REQUEST
public function rules()
{
return [
...