Laravel-Excel: Error Opening file with Excel. Possible data corrupted or bad file extension.
Prerequisites
- [ x] Able to reproduce the behaviour outside of your code, the problem is isolated to Laravel Excel.
- [x ] Checked that your issue isn’t already filed.
- [ x] Checked if no PR was submitted that fixes this problem.
Versions
- PHP version: 7.1
- Laravel version: 5.5.*
- Package version: ^3.0
Description
Downloading file from a FromQuery method… file downloads, upon opening XLSX file, receive an error message from Office: “Excel cannot open the file <filename.xlxs> because the file format or the file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file”
Steps to Reproduce
Here is my method
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);
});
}
}
I call it like this from a controller
//$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');
Expected behavior:
The file to be downloaded with data
Actual behavior:
The file downloads but Excel gives error opening it
Additional Information
I have tested the query in eloquent and it returns a collection with data.
(https://user-images.githubusercontent.com/18451450/40511758-f61e6570-5f5d-11e8-9f37-0b594f60be59.png)
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 25 (1 by maintainers)
Hi everyone,
I spend my day to understand this unworkable download function. PHPSpreadSheet seems to use PHP buffer. And depending on your PHP configuration some warnings or errors could interfer with the output.
Using :
solves for me. Maybe it should help some people.
Thank you for this awesome library.
Hi everyone,
This solution :
Works and solve the corrupt problem. But still have trouble with export using Xlsx/Xls. The downloaded file looks like this :
Any idea how to fix this ?
Thx !
If you are using ajax to download, please add
responseType: 'blob'
to your ajax request (I’m using axios)My example code:
Without
responseType: 'blob'
, the downloaded file can not be openTHanks alot its perfect answer
u can open error file with nano or vim. If you see a space before PK,just like this :
Maybe error happened in your code or vendor. I met the same problem and deal with remove vendor folder . It works well After reinstall the vendor
@Ribbon-Brooke Sorry don’t remember and I don’t have project sources anymore 😕
Thanks! I used on namespace Maatwebsite\Excel;
Solved all my download actions.
i met same issue. i fixed by
This solves all my problems. Also, if you cant install PHP spreadsheet and composer because it needs all the things u don’t know, try adding --ignore-platform-reqs in your composer require/update
This worked for me … thanks ❤️
This problem started to happen to me today with no change to any export. Using @leenzuur code sample fixed it after hours of research.
Thanks @Leenzuur , you saved my day! It worked! I wonder is there any any to fix this but @Leenzuur way, you know what’s I mean, if I have 10 Export class for 10 Model, when download, I have to add in 10 places.
I’m not sure if it’s still the same problem with PhpSpreadsheet, but PHPExcel had problems with having spaces (
) in front of
<?php
open tags. That used to cause this error in the past.