Laravel-excel: [PREGUNTA] Adjunte Excel generado con V 3.1

Creado en 22 nov. 2018  ·  8Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

Versiones

  • Versión de PHP: 7.1.7
  • Versión de Laravel: 5.7.13
  • Versión del paquete: 3.1

Descripción

Hola,
¿Cómo es posible adjuntar un archivo de Excel generado con la versión 3.1?

En la versión anterior (v.2) era posible a través del método create sin "-> download ()"

Lo intento de esta manera, pero no funciona:

$filename = 'text.xlsx';
$attachment = Excel::download(new TestExport(), $filename);

\Mail::to('[email protected]')->send(new SendMail($attachment));

# Inside SendMail.php
public function __construct($attachment)
{
    $this->attachment = $attachment;
}

public function build()
{

    $mail = $this->from('[email protected]')
        ->subject('test attachment')
        ->markdown('emails.test_mail')
        ->attach($this->attachment);

    return $mail;
}

Comentario más útil

Encontré una solución para que funcione sin tener que modificar la clase de Excel y su método protegido. Puede llamar getFile() desde Excel::download(/**/) . El código se ve así:

public function build()
    {
        return $this->markdown('emails.report')
            ->attach(
                Excel::download(
                    new AuditReport($this->audit), 
                    'report.xlsx'
                )->getFile(), ['as' => 'report.xlsx']
            );
    }

Excel::download() devuelve BinaryFileResponse , por eso no funciona directamente, pero puede tomar el archivo.

Espero que ayude 😃

Todos 8 comentarios

Tengo exactamente la misma pregunta.

Encontré una solución que cambia de protegido a público el método export () dentro del archivo:

maatwebsite \ excel \ src \ Excel.php

en fila: 166

de esta forma, el código puede ser:
`` ``
$ archivo adjunto = Excel :: export (new TestExport (), $ nombre de archivo);

[...]

$ mail = $ this-> from ('[email protected] ')
-> sujeto ('adjunto de prueba')
-> markdown ('emails.test_mail')
-> adjuntar ($ esto-> adjunto`` ['como' => $ nombre de archivo]);
`` ``

Encontré una solución para que funcione sin tener que modificar la clase de Excel y su método protegido. Puede llamar getFile() desde Excel::download(/**/) . El código se ve así:

public function build()
    {
        return $this->markdown('emails.report')
            ->attach(
                Excel::download(
                    new AuditReport($this->audit), 
                    'report.xlsx'
                )->getFile(), ['as' => 'report.xlsx']
            );
    }

Excel::download() devuelve BinaryFileResponse , por eso no funciona directamente, pero puede tomar el archivo.

Espero que ayude 😃

Encontré una solución para que funcione sin tener que modificar la clase de Excel y su método protegido. Puede llamar getFile() desde Excel::download(/**/) . El código se ve así:

public function build()
    {
        return $this->markdown('emails.report')
            ->attach(
                Excel::download(
                    new AuditReport($this->audit), 
                    'report.xlsx'
                )->getFile(), ['as' => 'report.xlsx']
            );
    }

Excel::download() devuelve BinaryFileResponse , por eso no funciona directamente, pero puede tomar el archivo.

Espero eso ayude

Tenga cuidado con el directorio tmp del servidor, ya que el archivo se escribe en el disco.

La exportación debe ser un método público.

¡Gracias chicos por ayudarse unos a otros! 👍

Así es como lo hago sin descargar / crear el archivo:

use Maatwebsite\Excel\Excel as BaseExcel;
use Maatwebsite\Excel\Facades\Excel;

...

$filename = "{$this->po->po_memo}.xlsx";
$attachment = Excel::raw(new PurchaseOrderLinesExport($this->po), BaseExcel::XLSX);
$subject = "Purchase Order Invoice"

return $this->from($this->po->employee->email)
            ->subject($subject)
            ->view('emails.pom.send')
            ->text('emails.pom.send')
            ->attachData($attachment, $filename);

Encontré una solución para que funcione sin tener que modificar la clase de Excel y su método protegido. Puede llamar getFile() desde Excel::download(/**/) . El código se ve así:

public function build()
    {
        return $this->markdown('emails.report')
            ->attach(
                Excel::download(
                    new AuditReport($this->audit), 
                    'report.xlsx'
                )->getFile(), ['as' => 'report.xlsx']
            );
    }

Excel::download() devuelve BinaryFileResponse , por eso no funciona directamente, pero puede tomar el archivo.

Espero que ayude a smiley

Gracias por esto, funcionó para mí.

use Maatwebsite\Excel\Excel as BaseExcel;
use Maatwebsite\Excel\Facades\Excel;

...

$filename = "{$this->po->po_memo}.xlsx";
$attachment = Excel::raw(new PurchaseOrderLinesExport($this->po), BaseExcel::XLSX);

Muchas gracias. es trabajo para mi

¿Fue útil esta página
0 / 5 - 0 calificaciones