Привет,
как можно прикрепить файл Excel, созданный с помощью версии 3.1?
В предыдущей версии (v.2) это было возможно с помощью метода create без "-> download ()"
Я пытаюсь вот так, но не получается:
$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;
}
У меня точно такой же вопрос.
Я нашел решение, которое меняет с защищенного на общедоступный метод export () внутри файла:
maatwebsite \ excel \ src \ Excel.php
в ряду: 166
таким образом код может быть:
`` ''
$ attachment = Excel :: export (новый TestExport (), $ filename);
[...]
$ mail = $ this-> from ('[email protected] ')
-> тема ('тестовое приложение')
-> уценка ('emails.test_mail')
-> прикрепить ($ this-> attachment,, ['as' => $ filename]);
`` ''
Я нашел решение, позволяющее заставить его работать без изменения класса Excel и его защищенного метода. Вы можете вызвать getFile()
из Excel::download(/**/)
. Код выглядит так:
public function build()
{
return $this->markdown('emails.report')
->attach(
Excel::download(
new AuditReport($this->audit),
'report.xlsx'
)->getFile(), ['as' => 'report.xlsx']
);
}
Excel::download()
возвращает BinaryFileResponse
, поэтому он не работает напрямую, но вы можете получить файл.
Надеюсь, это поможет 😃
Я нашел решение, позволяющее заставить его работать без изменения класса Excel и его защищенного метода. Вы можете вызвать
getFile()
изExcel::download(/**/)
. Код выглядит так:public function build() { return $this->markdown('emails.report') ->attach( Excel::download( new AuditReport($this->audit), 'report.xlsx' )->getFile(), ['as' => 'report.xlsx'] ); }
Excel::download()
возвращаетBinaryFileResponse
, поэтому он не работает напрямую, но вы можете получить файл.Надеюсь, это поможет
Следите за директорией tmp сервера, пока файл записывается на диск.
Экспорт должен быть общедоступным методом.
Спасибо, ребята, что помогли друг другу! 👍
Вот как я это делаю без загрузки / создания файла:
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);
Я нашел решение, позволяющее заставить его работать без изменения класса Excel и его защищенного метода. Вы можете вызвать
getFile()
изExcel::download(/**/)
. Код выглядит так:public function build() { return $this->markdown('emails.report') ->attach( Excel::download( new AuditReport($this->audit), 'report.xlsx' )->getFile(), ['as' => 'report.xlsx'] ); }
Excel::download()
возвращаетBinaryFileResponse
, поэтому он не работает напрямую, но вы можете получить файл.Надеюсь, это поможет смайлик
Спасибо за это, у меня сработало.
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);
Большое спасибо. это работа для меня
Самый полезный комментарий
Я нашел решение, позволяющее заставить его работать без изменения класса Excel и его защищенного метода. Вы можете вызвать
getFile()
изExcel::download(/**/)
. Код выглядит так:Excel::download()
возвращаетBinaryFileResponse
, поэтому он не работает напрямую, но вы можете получить файл.Надеюсь, это поможет 😃