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;
}
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()
desdeExcel::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()
devuelveBinaryFileResponse
, 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()
desdeExcel::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()
devuelveBinaryFileResponse
, 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
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()
desdeExcel::download(/**/)
. El código se ve así:Excel::download()
devuelveBinaryFileResponse
, por eso no funciona directamente, pero puede tomar el archivo.Espero que ayude 😃