Datei von einer FromQuery-Methode herunterladen.... Dateidownloads erhalten beim Öffnen der XLSX-Datei eine Fehlermeldung von Office:
"Excel kann die Datei nicht öffnen
Hier ist meine Methode
namespace Modules\Profile\Exports;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
use Modules\Profile\Entities\Profile;
class ProfileExport implements FromQuery
{
use Exportable;
public function __construct($range)
{
$this->start = $range['start'];
$this->end = $range['end'];
}
public function query()
{
return Profile::query()->where('created_at', '>=', $this->start . ' 00:00:00')
->where('created_at', '<=', $this->end . ' 23:59:59')
->whereHas('user.roles', function($query){
$query->where('id', 2);
});
}
}
Ich nenne es so von einem Controller aus
//$request->start = '2018-01-01';
//$request->end = '2018-05-01';
$range = ['start'=>$request->start, 'end'=>$request->end];
return (new ProfileExport($range))->download($request->start . '-' . $request->end .'-pet-parent-signups.xlsx');
Erwartetes Verhalten:
Die Datei, die mit Daten heruntergeladen werden soll
Tatsächliches Verhalten:
Die Datei wird heruntergeladen, aber Excel gibt beim Öffnen einen Fehler aus
Ich habe die Abfrage in eloquent getestet und sie gibt eine Sammlung mit Daten zurück.
(https://user-images.githubusercontent.com/18451450/40511758-f61e6570-5f5d-11e8-9f37-0b594f60be59.png)
Danke auch im Voraus :)
Vor allem, um sich die Zeit zu nehmen, diesen Wrapper zu schreiben, um damit anzufangen
Ich bin mir nicht sicher, ob es immer noch das gleiche Problem mit PhpSpreadsheet ist, aber PHPExcel hatte Probleme mit Leerzeichen ( ) vor
<?php
offenen Tags. Das hat in der Vergangenheit zu diesem Fehler geführt.
Sie können die Fehlerdatei mit nano oder vim öffnen.
Wenn Sie ein Leerzeichen vor PK sehen, einfach so:
Möglicherweise ist ein Fehler in Ihrem Code oder Anbieter aufgetreten. Ich habe das gleiche Problem und beschäftige mich mit dem Entfernen des Vendor-Ordners. Es funktioniert gut Nach der Neuinstallation des Anbieters
Hallo zusammen, danke für den Hinweis.
Ich denke, Sie haben Recht, dass am Anfang der Datei ein zusätzlicher Zeilenumbruch oder etwas anderes steht. Ich habe es noch nicht verfolgt, aber wenn ich zu CSV wechsle, kann ich die Datei öffnen und die Daten sind da, aber die erste Zeile ist leer....
Werde noch weiter suchen, werde mich wieder melden. Ich suchte nach einer Datei, die mit einem Zeilenumbruch begann und dann
Ich werde dies schließen und ein neues mit einer besseren Beschreibung des Problems öffnen. Ich kann die Quelle der leeren Zeile nicht finden
Ich habe das gleiche Problem getroffen. Ich habe repariert von
$filename = 'meal_list_'.date('YmdHis').'.xlsx';
Excel::store(new MealExport($request), $filename, 'public');
return redirect( Storage::url("storage/{$filename}" ));
}
Hallo allerseits,
Ich verbringe meinen Tag damit, diese unpraktische Download-Funktion zu verstehen. PHPSpreadSheet scheint PHP-Puffer zu verwenden. Und je nach PHP-Konfiguration können einige Warnungen oder Fehler die Ausgabe beeinträchtigen.
Verwendung:
// in controller
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
löst sich für mich.
Vielleicht sollte es einigen Leuten helfen.
Vielen Dank für diese tolle Bibliothek.
Hallo allerseits,
Ich verbringe meinen Tag damit, diese unpraktische Download-Funktion zu verstehen. PHPSpreadSheet scheint PHP-Puffer zu verwenden. Und je nach PHP-Konfiguration können einige Warnungen oder Fehler die Ausgabe beeinträchtigen.
Verwendung:
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
löst sich für mich.
Vielleicht sollte es einigen Leuten helfen.Vielen Dank für diese tolle Bibliothek.
Vielen Dank, die perfekte Antwort
Hallo allerseits,
Diese Lösung :
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
Funktioniert und löst das korrupte Problem. Habe aber immer noch Probleme beim Export mit Xlsx/Xls.
Die heruntergeladene Datei sieht so aus:
Irgendeine Idee, wie man das beheben kann?
Vielen Dank !
Hallo allerseits,
Ich verbringe meinen Tag damit, diese unpraktische Download-Funktion zu verstehen. PHPSpreadSheet scheint PHP-Puffer zu verwenden. Und je nach PHP-Konfiguration können einige Warnungen oder Fehler die Ausgabe beeinträchtigen.
Verwendung:
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
löst sich für mich.
Vielleicht sollte es einigen Leuten helfen.Vielen Dank für diese tolle Bibliothek.
Liebe dich, Mann.. Du hast meinen Kopf gerettet...
Ich bin mir nicht sicher, ob es immer noch das gleiche Problem mit PhpSpreadsheet ist, aber PHPExcel hatte Probleme mit Leerzeichen (
) vor
<?php
offenen Tags. Das hat in der Vergangenheit zu diesem Fehler geführt.
Hallo @patrickbrouwers
Vielen Dank für Ihren Kommentar.
Löst für mich.
Wenn Sie Ajax zum Herunterladen verwenden,
Bitte fügen Sie responseType: 'blob'
zu Ihrer Ajax-Anfrage hinzu (ich verwende Axios)
Mein Beispielcode:
axios.post('/path/to/export', data, {
responseType: 'blob',
})
.then(response => {
const filename = 'file.xlsx';
let blob = new Blob([response.data], {
type: 'application/octet-stream',
});
if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE workaround for "HTML7007: One or more blob URLs were
// revoked by closing the blob for which they were created.
// These URLs will no longer resolve as the data backing
// the URL has been freed."
window.navigator.msSaveBlob(blob, filename);
} else {
let blobURL = window.URL.createObjectURL(blob);
let tempLink = document.createElement('a');
tempLink.style.display = 'none';
tempLink.href = blobURL;
tempLink.download = filename;
tempLink.click();
window.URL.revokeObjectURL(blobURL);
}
})
Ohne responseType: 'blob'
kann die heruntergeladene Datei nicht geöffnet werden
Wenn Sie Ajax zum Herunterladen verwenden,
Bitte fügen SieresponseType: 'blob'
zu Ihrer Ajax-Anfrage hinzu (ich verwende Axios)Mein Beispielcode:
axios.post('/path/to/export', data, { responseType: 'blob', }) .then(response => { const filename = 'file.xlsx'; let blob = new Blob([response.data], { type: 'application/octet-stream', }); if (typeof window.navigator.msSaveBlob !== 'undefined') { // IE workaround for "HTML7007: One or more blob URLs were // revoked by closing the blob for which they were created. // These URLs will no longer resolve as the data backing // the URL has been freed." window.navigator.msSaveBlob(blob, filename); } else { let blobURL = window.URL.createObjectURL(blob); let tempLink = document.createElement('a'); tempLink.style.display = 'none'; tempLink.href = blobURL; tempLink.download = filename; tempLink.click(); window.URL.revokeObjectURL(blobURL); } })
Ohne
responseType: 'blob'
kann die heruntergeladene Datei nicht geöffnet werden
Dank!! rette mein Leben, ich schaue mir immer wieder an, welche PHP-Codezeile meine exportierte Datei beschädigt hat
Hallo allerseits,
Ich verbringe meinen Tag damit, diese unpraktische Download-Funktion zu verstehen. PHPSpreadSheet scheint PHP-Puffer zu verwenden. Und je nach PHP-Konfiguration können einige Warnungen oder Fehler die Ausgabe beeinträchtigen.
Verwendung:
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
löst sich für mich.
Vielleicht sollte es einigen Leuten helfen.Vielen Dank für diese tolle Bibliothek.
Danke @Leenzuur , du hast meinen Tag gerettet! Es funktionierte! Ich frage mich, ob es irgendwelche gibt, um dies zu beheben, aber @Leenzuur , Sie wissen, was ich meine, wenn ich 10
Dieses Problem trat bei mir heute auf, ohne dass sich der Export geändert hat. Mit @leenzuur- Codebeispiel wurde es nach stundenlanger Recherche behoben.
Hilfreichster Kommentar
Hallo allerseits,
Ich verbringe meinen Tag damit, diese unpraktische Download-Funktion zu verstehen. PHPSpreadSheet scheint PHP-Puffer zu verwenden. Und je nach PHP-Konfiguration können einige Warnungen oder Fehler die Ausgabe beeinträchtigen.
Verwendung:
löst sich für mich.
Vielleicht sollte es einigen Leuten helfen.
Vielen Dank für diese tolle Bibliothek.