Laravel-excel: [ВОПРОС] Прикрепите сгенерированный Excel к V 3.1

Созданный на 22 нояб. 2018  ·  8Комментарии  ·  Источник: Maatwebsite/Laravel-Excel

Версии

  • Версия PHP: 7.1.7
  • Версия Laravel: 5.7.13
  • Версия пакета: 3.1

Описание

Привет,
как можно прикрепить файл 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;
}

Самый полезный комментарий

Я нашел решение, позволяющее заставить его работать без изменения класса 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 , поэтому он не работает напрямую, но вы можете получить файл.

Надеюсь, это поможет 😃

Все 8 Комментарий

У меня точно такой же вопрос.

Я нашел решение, которое меняет с защищенного на общедоступный метод 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);

Большое спасибо. это работа для меня

Была ли эта страница полезной?
0 / 5 - 0 рейтинги