Laravel-excel: [QUESTION] Anexar excel gerado com V 3.1

Criado em 22 nov. 2018  ·  8Comentários  ·  Fonte: Maatwebsite/Laravel-Excel

Versões

  • Versão PHP: 7.1.7
  • Versão do Laravel: 5.7.13
  • Versão do pacote: 3.1

Descrição

Olá,
como é possível anexar um arquivo excel gerado com a versão 3.1?

Na versão anterior (v.2) era possível através do método de criação sem "-> download ()"

Estou tentando desta forma, mas não 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;
}

Comentários muito úteis

Eu encontrei uma solução para fazê-lo funcionar sem ter que modificar a classe do Excel e seu método protegido. Você pode chamar getFile() de Excel::download(/**/) . O código é assim:

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

Excel::download() retorna um BinaryFileResponse é por isso que ele não funciona diretamente, mas você pode pegar o arquivo.

Espero que ajude 😃

Todos 8 comentários

Eu tenho exatamente a mesma pergunta.

Eu encontrei uma solução ao mudar de protegido para público o método export () dentro do arquivo:

maatwebsite \ excel \ src \ Excel.php

na linha: 166

desta forma, o código pode ser:
`` ``
$ attach = Excel :: export (new TestExport (), $ filename);

[...]

$ mail = $ this-> from ('[email protected] ')
-> assunto ('anexo de teste')
-> markdown ('emails.test_mail')
-> anexar ($ this-> anexo,, ['as' => $ nome do arquivo]);
`` ``

Eu encontrei uma solução para fazê-lo funcionar sem ter que modificar a classe do Excel e seu método protegido. Você pode chamar getFile() de Excel::download(/**/) . O código é assim:

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

Excel::download() retorna um BinaryFileResponse é por isso que ele não funciona diretamente, mas você pode pegar o arquivo.

Espero que ajude 😃

Eu encontrei uma solução para fazê-lo funcionar sem ter que modificar a classe do Excel e seu método protegido. Você pode chamar getFile() de Excel::download(/**/) . O código é assim:

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

Excel::download() retorna um BinaryFileResponse é por isso que ele não funciona diretamente, mas você pode pegar o arquivo.

Espero que ajude

Cuidado com o diretório tmp do servidor, pois o arquivo é gravado no disco.

A exportação deve ser um método público.

Obrigado pessoal por se ajudarem! 👍

Aqui está como faço isso sem baixar / criar o arquivo:

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);

Eu encontrei uma solução para fazê-lo funcionar sem ter que modificar a classe do Excel e seu método protegido. Você pode chamar getFile() de Excel::download(/**/) . O código é assim:

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

Excel::download() retorna um BinaryFileResponse é por isso que ele não funciona diretamente, mas você pode pegar o arquivo.

Espero que ajude smiley

Obrigado por isso, funcionou para mim.

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);

Muito obrigado. é trabalho para mim

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

vandolphreyes picture vandolphreyes  ·  3Comentários

bahmanyaghoobi picture bahmanyaghoobi  ·  3Comentários

thearabbit picture thearabbit  ·  3Comentários

gamevnlc picture gamevnlc  ·  3Comentários

contifico picture contifico  ·  3Comentários