Mengunduh file dari metode FromQuery.... unduhan file, saat membuka file XLSX, menerima pesan kesalahan dari Office:
"Excel tidak dapat membuka file
Inilah metode saya
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);
});
}
}
Saya menyebutnya seperti ini dari pengontrol
//$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');
Perilaku yang diharapkan:
File yang akan diunduh dengan data
Perilaku sebenarnya:
File diunduh tetapi Excel memberikan kesalahan saat membukanya
Saya telah menguji kueri dengan fasih dan mengembalikan koleksi dengan data.
(https://user-images.githubusercontent.com/18451450/40511758-f61e6570-5f5d-11e8-9f37-0b594f60be59.png)
Terima kasih juga sebelumnya :)
Terutama untuk meluangkan waktu untuk menulis bungkus ini untuk memulai
Saya tidak yakin apakah itu masih masalah yang sama dengan PhpSpreadsheet, tetapi PHPExcel memiliki masalah dengan memiliki spasi ( ) di depan
<?php
tag terbuka. Itu dulu menyebabkan kesalahan ini di masa lalu.
Anda dapat membuka file kesalahan dengan nano atau vim.
Jika Anda melihat spasi sebelum PK, seperti ini
Mungkin kesalahan terjadi pada kode atau vendor Anda. Saya menemui masalah yang sama dan berurusan dengan menghapus folder vendor. Ini berfungsi dengan baik Setelah menginstal ulang vendor
Hai semua, terima kasih atas petunjuknya.
Saya pikir Anda benar bahwa ada jeda baris tambahan atau sesuatu di awal file. Saya belum melacaknya tetapi ketika saya beralih ke CSV, saya dapat membuka file dan datanya ada tetapi baris pertama kosong ....
Akan melihat lagi, laporan sakit kembali. Saya mengambil file yang dimulai dengan jeda baris dan kemudian
Saya akan menutup ini dan membuka yang baru dengan deskripsi masalah yang lebih baik. Saya tidak dapat menemukan sumber baris kosong
saya bertemu masalah yang sama. saya perbaiki oleh
$filename = 'meal_list_'.date('YmdHis').'.xlsx';
Excel::store(new MealExport($request), $filename, 'public');
return redirect( Storage::url("storage/{$filename}" ));
}
Halo semuanya,
Saya menghabiskan hari saya untuk memahami fungsi unduhan yang tidak dapat dijalankan ini. PHPSpreadSheet tampaknya menggunakan buffer PHP. Dan tergantung pada konfigurasi PHP Anda, beberapa peringatan atau kesalahan dapat mengganggu output.
Menggunakan :
// in controller
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
memecahkan untuk saya.
Mungkin itu harus membantu beberapa orang.
Terima kasih untuk perpustakaan yang luar biasa ini.
Halo semuanya,
Saya menghabiskan hari saya untuk memahami fungsi unduhan yang tidak dapat dijalankan ini. PHPSpreadSheet tampaknya menggunakan buffer PHP. Dan tergantung pada konfigurasi PHP Anda, beberapa peringatan atau kesalahan dapat mengganggu output.
Menggunakan :
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
memecahkan untuk saya.
Mungkin itu harus membantu beberapa orang.Terima kasih untuk perpustakaan yang luar biasa ini.
Terima kasih banyak jawaban yang sempurna
Halo semuanya,
Solusi ini:
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
Bekerja dan memecahkan masalah korup. Tetapi masih mengalami masalah dengan ekspor menggunakan Xlsx/Xls.
File yang diunduh terlihat seperti ini:
Adakah ide bagaimana cara memperbaikinya?
Terima kasih !
Halo semuanya,
Saya menghabiskan hari saya untuk memahami fungsi unduhan yang tidak dapat dijalankan ini. PHPSpreadSheet tampaknya menggunakan buffer PHP. Dan tergantung pada konfigurasi PHP Anda, beberapa peringatan atau kesalahan dapat mengganggu output.
Menggunakan :
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
memecahkan untuk saya.
Mungkin itu harus membantu beberapa orang.Terima kasih untuk perpustakaan yang luar biasa ini.
Love You man .. Anda menyelamatkan kepalaku ...
Saya tidak yakin apakah itu masih masalah yang sama dengan PhpSpreadsheet, tetapi PHPExcel memiliki masalah dengan memiliki spasi (
) di depan
<?php
tag terbuka. Itu dulu menyebabkan kesalahan ini di masa lalu.
Halo @patrickbrouwers
Terima kasih atas komentar Anda.
Memecahkan untuk saya.
Jika Anda menggunakan ajax untuk mengunduh,
tolong tambahkan responseType: 'blob'
ke permintaan ajax Anda (saya menggunakan axios)
Kode contoh saya:
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);
}
})
Tanpa responseType: 'blob'
, file yang diunduh tidak dapat dibuka
Jika Anda menggunakan ajax untuk mengunduh,
tolong tambahkanresponseType: 'blob'
ke permintaan ajax Anda (saya menggunakan axios)Kode contoh saya:
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); } })
Tanpa
responseType: 'blob'
, file yang diunduh tidak dapat dibuka
Terima kasih!! selamatkan hidup saya, saya terus melihat baris kode php mana yang merusak file yang saya ekspor.. ternyata adalah axios
Halo semuanya,
Saya menghabiskan hari saya untuk memahami fungsi unduhan yang tidak dapat dijalankan ini. PHPSpreadSheet tampaknya menggunakan buffer PHP. Dan tergantung pada konfigurasi PHP Anda, beberapa peringatan atau kesalahan dapat mengganggu output.
Menggunakan :
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
memecahkan untuk saya.
Mungkin itu harus membantu beberapa orang.Terima kasih untuk perpustakaan yang luar biasa ini.
Terima kasih @Leenzuur , Anda menyelamatkan hari saya! Itu berhasil! Saya ingin tahu apakah ada yang bisa memperbaiki ini tetapi @Leenzuur , Anda tahu apa yang saya maksud, jika saya memiliki 10 kelas Ekspor untuk 10 Model, saat mengunduh, saya harus menambahkan 10 tempat.
Masalah ini mulai terjadi pada saya hari ini tanpa perubahan pada ekspor apa pun. Menggunakan sampel kode @leenzuur memperbaikinya setelah berjam-jam penelitian.
Komentar yang paling membantu
Halo semuanya,
Saya menghabiskan hari saya untuk memahami fungsi unduhan yang tidak dapat dijalankan ini. PHPSpreadSheet tampaknya menggunakan buffer PHP. Dan tergantung pada konfigurasi PHP Anda, beberapa peringatan atau kesalahan dapat mengganggu output.
Menggunakan :
memecahkan untuk saya.
Mungkin itu harus membantu beberapa orang.
Terima kasih untuk perpustakaan yang luar biasa ini.