Laravel-excel: [FRAGE] Generiertes Excel mit V 3.1 anhängen

Erstellt am 22. Nov. 2018  ·  8Kommentare  ·  Quelle: Maatwebsite/Laravel-Excel

Versionen

  • PHP-Version: 7.1.7
  • Laravel-Version: 5.7.13
  • Paketversion: 3.1

Beschreibung

Hallo,
Wie ist es möglich, eine mit der Version 3.1 generierte Excel-Datei anzuhängen?

In der vorherigen Version (v.2) war es durch die Methode create ohne "->download()" möglich

Ich versuche es so, aber es funktioniert nicht:

$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;
}

Hilfreichster Kommentar

Ich habe eine Lösung gefunden, damit es funktioniert, ohne die Excel-Klasse und ihre geschützte Methode ändern zu müssen. Sie können getFile() von Excel::download(/**/) aus anrufen. Der Code sieht so aus:

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

Excel::download() gibt ein BinaryFileResponse , deshalb funktioniert es nicht direkt, aber Sie können die Datei abrufen.

Hoffe es hilft 😃

Alle 8 Kommentare

Ich habe genau die gleiche Frage.

Ich habe eine Lösung gefunden, die die Methode export() in der Datei von geschützt zu öffentlich ändert:

maatwebsite\excel\src\Excel.php

in Reihe: 166

Auf diese Weise kann der Code sein:
````
$attachment = Excel::export(new TestExport(), $filename);

[…]

$mail = $this->from('[email protected]')
->Betreff('Anhang testen')
->Markdown('emails.test_mail')
->attach($this->attachment, , ['as' => $Dateiname]);
````

Ich habe eine Lösung gefunden, damit es funktioniert, ohne die Excel-Klasse und ihre geschützte Methode ändern zu müssen. Sie können getFile() von Excel::download(/**/) aus anrufen. Der Code sieht so aus:

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

Excel::download() gibt ein BinaryFileResponse , deshalb funktioniert es nicht direkt, aber Sie können die Datei abrufen.

Hoffe es hilft 😃

Ich habe eine Lösung gefunden, damit es funktioniert, ohne die Excel-Klasse und ihre geschützte Methode ändern zu müssen. Sie können getFile() von Excel::download(/**/) aus anrufen. Der Code sieht so aus:

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

Excel::download() gibt ein BinaryFileResponse , deshalb funktioniert es nicht direkt, aber Sie können die Datei abrufen.

Ich hoffe es hilft

Achten Sie jedoch auf das tmp-Verzeichnis des Servers, wenn die Datei auf die Festplatte geschrieben wird.

Der Export sollte eine öffentliche Methode sein.

Danke Jungs, dass ihr euch gegenseitig geholfen habt! 👍

So mache ich es, ohne die Datei herunterzuladen / zu erstellen:

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

Ich habe eine Lösung gefunden, damit es funktioniert, ohne die Excel-Klasse und ihre geschützte Methode ändern zu müssen. Sie können getFile() von Excel::download(/**/) aus anrufen. Der Code sieht so aus:

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

Excel::download() gibt ein BinaryFileResponse , deshalb funktioniert es nicht direkt, aber Sie können die Datei abrufen.

Hoffe es hilft smiley

Danke dafür, bei mir hat es funktioniert.

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

Danke vielmals. es ist arbeit für mich

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen