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

  1. composer.phar require maatwebsite/excel

Registrar Provider

  1. Maatwebsite\Excel\ExcelServiceProvider::class,

Registrar alias

  1. '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. 

  1. <?php
  2. namespace App\Exports;
  3. use App\User;
  4. use DB;
  5. use Maatwebsite\Excel\Concerns\FromCollection;
  6. use Maatwebsite\Excel\Concerns\WithHeadings;
  7. class UsersExport implements FromCollection,WithHeadings
  8. {
  9. /**
  10. * @return \Illuminate\Support\Collection
  11. */
  12. public function headings(): array
  13. {
  14. return [
  15. 'Id',
  16. 'Nombre',
  17. 'Email',
  18. ];
  19. }
  20. public function collection()
  21. {
  22. $users = DB::table('Users')->select('id','name', 'email')->get();
  23. return $users;
  24. }
  25. }

 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.

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Exports\UsersExport;
  5. use Maatwebsite\Excel\Facades\Excel;
  6. class HomeController extends Controller
  7. {
  8. public function export(){
  9. return Excel::download(new UsersExport,"users.xlsx");
  10. }
  11. }

CREAR RUTA

En el archivo de rutas se añade la ruta del método creado.

  1. Route::get("/exportar","HomeController@export");

CREAR ENLACE DESDE LA VISTA

Desde la vista se crea un enlace hacia la ruta

  1. <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.

  1. <div>
  2. <a href ="{{route('exportar',$factura->id)}}">Excel</button>
  3. </div>

 CREAR RUTA

Se incluye el parámetro en la ruta desde el archivo de rutas.

  1. 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.

  1. public function export($id){
  2. $productos_factura=Detalle_factura::where("id_factura",$id)->get();
  3. return Excel::download(new FacturasExport($productos_factura),"factura.xlsx");
  4. }

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. 

  1. namespace App\Exports;
  2. use Illuminate\Contracts\View\View;
  3. use Maatwebsite\Excel\Concerns\FromView;
  4. class FacturasExport implements FromView {
  5. protected $productos;
  6. public function __construct($productos_factura=null)
  7. {
  8. $this->productos=$productos_factura;
  9. }
  10. public function view(): View {
  11. $productos_factura=$this->productos;
  12. return view("facturas.ajax-product",compact("productos_factura"));
  13. }
  14. }

fuente: styde.net


Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso