Exportar a Excel
Exportar a formato Excel en Laravel
Exportar una tabla a un documento Excel es posible mediante la librería MaatWebsite. Para ello es necesario instalar la librería, crear una clase que contiene los datos y se crea el método que permite enviarlos. Para instalar MaatWebsite, se realiza un require desde la terminal y desde el archivo config/app.php se registra el servicio en el array providers y el alias en el array aliases.
INSTALAR MaatWebsite
composer.phar require maatwebsite/excel
Registrar Provider
Maatwebsite\Excel\ExcelServiceProvider::class,
Registrar alias
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
CREAR CLASE
Una vez instalado el paquete se crea una clase para personalizar los datos a exportar. En el ejemplo siguiente se crea la clase donde se indican los campos presentes en la tabla y se crea una colección de la tabla seleccionando los campos.
<?php
namespace App\Exports;
use App\User;
use DB;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class UsersExport implements FromCollection,WithHeadings
{
/**
* @return \Illuminate\Support\Collection
*/
public function headings(): array
{
return [
'Id',
'Nombre',
'Email',
];
}
public function collection()
{
$users = DB::table('Users')->select('id','name', 'email')->get();
return $users;
}
}
CREAR MÉTODO
A continuación desde un controlador se crea un método que envía los datos del Excel. El código de ejemplo que sigue a continuación muestra con el método nombrado export, aunque puede tener cualquier otro nombre, realiza la llamada al método download que contiene dos parámetros. El primer parámetro es la instancia de la clase creada anteriormente, en este caso llamada UsersExport y el segundo parámetro es el nombre que se le quiere dar al archivo que será descargado.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
class HomeController extends Controller
{
public function export(){
return Excel::download(new UsersExport,"users.xlsx");
}
}
CREAR RUTA
En el archivo de rutas se añade la ruta del método creado.
Route::get("/exportar","HomeController@export");
CREAR ENLACE DESDE LA VISTA
Desde la vista se crea un enlace hacia la ruta
<a href="/exportar">Exportar</a>
Fuente: Extraido de NIGMACode y muy bien explicado por José Luís Guisado
EXPORTAR PASANDO DATOS
Existe también la posibilidad de exportar pasando datos desde la vista al controlador. Para ello es necesario añadir los parámetros en la vista y en la ruta para después añadirlos en la llamada al método download el controlador.
CREAR VISTA
Se crea el enlace pasando el parámetro.
<div>
<a href ="{{route('exportar',$factura->id)}}">Excel</button>
</div>
CREAR RUTA
Se incluye el parámetro en la ruta desde el archivo de rutas.
Route::get("exportar/{id}","FacturasController@export")->name("exportar");
CREAR MÉTODO
El método debe realizar la llamada al método download con sus dos parámetros. El primer parámetro es la clase que es el que incluye los datos y el segundo parámetro es el nombre del archivo que será descargado.
public function export($id){
$productos_factura=Detalle_factura::where("id_factura",$id)->get();
return Excel::download(new FacturasExport($productos_factura),"factura.xlsx");
}
CREAR CLASE
La clase, a diferencia de la clase del ejemplo anterior (sin datos) no utiliza el método collection, si no el método view. Para ello se debe importar la interface View de Laravel e implementar FromView tal como se puede observar en el código siguiente. Esto también es útil para una tabla que maneja datos relacionados con otras tablas.
namespace App\Exports;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class FacturasExport implements FromView {
protected $productos;
public function __construct($productos_factura=null)
{
$this->productos=$productos_factura;
}
public function view(): View {
$productos_factura=$this->productos;
return view("facturas.ajax-product",compact("productos_factura"));
}
}
fuente: styde.net
Para poder comentar es necesario iniciar sesión