تنزيل ملف من طريقة FromQuery .... تنزيلات الملفات ، عند فتح ملف XLSX ، تتلقى رسالة خطأ من Office:
"لا يمكن لـ Excel فتح الملف
ها هي طريقتي
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);
});
}
}
أسميها هكذا من وحدة تحكم
//$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');
سلوك متوقع:
الملف المراد تنزيله بالبيانات
السلوك الفعلي:
يتم تنزيل الملف ولكن يعطي Excel خطأ في فتحه
لقد اختبرت الاستعلام بليغة ويعيد مجموعة مع البيانات.
(https://user-images.githubusercontent.com/18451450/40511758-f61e6570-5f5d-11e8-9f37-0b594f60be59.png)
شكرا لك أيضا مقدما :)
خاصة لأخذ الوقت الكافي لكتابة هذا الغلاف لتبدأ به
لست متأكدًا مما إذا كانت لا تزال نفس المشكلة في PhpSpreadsheet ، لكن PHPExcel واجهت مشاكل في وجود مسافات ( ) أمام العلامات المفتوحة
<?php
. كان من المعتاد أن يتسبب في هذا الخطأ في الماضي.
يمكنك فتح ملف خطأ باستخدام nano أو vim.
إذا رأيت مسافة قبل PK ، تمامًا مثل هذا :
ربما حدث خطأ في التعليمات البرمجية أو البائع. واجهت نفس المشكلة وتعاملت مع إزالة مجلد البائع. يعمل بشكل جيد بعد إعادة تثبيت البائع
مرحبًا بالجميع ، شكرًا على القيادة.
أعتقد أنك محق في وجود فاصل أسطر إضافي أو شيء ما في بداية الملف. لم أقم بتتبعه بعد ولكن عندما أقوم بالتبديل إلى CSV ، يمكنني فتح الملف والبيانات موجودة ولكن الصف الأول فارغ ...
سوف ننظر أكثر ، تقرير سيء مرة أخرى. استحوذت على ملف يبدأ بفاصل أسطر ثم
سأقوم بإغلاق هذا وفتح واحدة جديدة مع وصف أفضل للمشكلة. لا يمكنني العثور على مصدر الصف الفارغ
التقيت نفس المشكلة. أنا ثابتة بواسطة
$filename = 'meal_list_'.date('YmdHis').'.xlsx';
Excel::store(new MealExport($request), $filename, 'public');
return redirect( Storage::url("storage/{$filename}" ));
}
مرحبا جميعا،
أقضي يومي لأفهم وظيفة التنزيل غير القابلة للتطبيق. يبدو أن PHPScribSheet يستخدم PHP buffer. واعتمادًا على تكوين PHP الخاص بك ، قد تتداخل بعض التحذيرات أو الأخطاء مع الإخراج.
استخدام :
// in controller
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
يحل بالنسبة لي.
ربما ينبغي أن تساعد بعض الناس.
شكرا لك على هذه المكتبة الرائعة.
مرحبا جميعا،
أقضي يومي لأفهم وظيفة التنزيل غير القابلة للتطبيق. يبدو أن PHPScribSheet يستخدم PHP buffer. واعتمادًا على تكوين PHP الخاص بك ، قد تتداخل بعض التحذيرات أو الأخطاء مع الإخراج.
استخدام :
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
يحل بالنسبة لي.
ربما ينبغي أن تساعد بعض الناس.شكرا لك على هذه المكتبة الرائعة.
شكرا جزيلا على إجابته المثالية
مرحبا جميعا،
هذا الحل :
ob_end_clean(); // this
ob_start(); // and this
return Excel::download(new MyExport, 'file.xls');
يعمل وحل مشكلة الفساد. ولكن لا تزال تواجه مشكلة في التصدير باستخدام Xlsx / Xls.
يبدو الملف الذي تم تنزيله كالتالي:
أي فكرة كيف أصلح هذا المشكل ؟
شكرا !
مرحبا جميعا،
أقضي يومي لأفهم وظيفة التنزيل غير القابلة للتطبيق. يبدو أن PHPScribSheet يستخدم PHP buffer. واعتمادًا على تكوين PHP الخاص بك ، قد تتداخل بعض التحذيرات أو الأخطاء مع الإخراج.
استخدام :
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
يحل بالنسبة لي.
ربما ينبغي أن تساعد بعض الناس.شكرا لك على هذه المكتبة الرائعة.
أحبك يا رجل .. حفظت رأسي ...
لست متأكدًا مما إذا كانت لا تزال نفس المشكلة في PhpSpreadsheet ، لكن PHPExcel واجهت مشاكل في وجود مسافات (
) أمام العلامات المفتوحة
<?php
. كان من المعتاد أن يتسبب في هذا الخطأ في الماضي.
مرحباpatrickbrouwers
شكرا على تعليقك.
يحل بالنسبة لي.
إذا كنت تستخدم أياكس للتنزيل ،
الرجاء إضافة responseType: 'blob'
إلى طلب ajax الخاص بك (أنا أستخدم axios)
رمز المثال الخاص بي:
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);
}
})
بدون responseType: 'blob'
، لا يمكن فتح الملف الذي تم تنزيله
إذا كنت تستخدم أياكس للتنزيل ،
الرجاء إضافةresponseType: 'blob'
إلى طلب ajax الخاص بك (أنا أستخدم axios)رمز المثال الخاص بي:
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); } })
بدون
responseType: 'blob'
، لا يمكن فتح الملف الذي تم تنزيله
شكر!! أنقذ حياتي ، ما زلت أبحث في أي سطر من كود php أفسد ملفي الذي تم تصديره .. تبين أنه أكسيوس
مرحبا جميعا،
أقضي يومي لأفهم وظيفة التنزيل غير القابلة للتطبيق. يبدو أن PHPScribSheet يستخدم PHP buffer. واعتمادًا على تكوين PHP الخاص بك ، قد تتداخل بعض التحذيرات أو الأخطاء مع الإخراج.
استخدام :
// in controller ob_end_clean(); // this ob_start(); // and this return Excel::download(new MyExport, 'file.xls');
يحل بالنسبة لي.
ربما ينبغي أن تساعد بعض الناس.شكرا لك على هذه المكتبة الرائعة.
شكرا لينزور ، لقد أنقذت يومي! انها عملت! أتساءل هل هناك أي شيء لإصلاح هذا ولكن طريقة Lenzuur @ ، أنت تعرف ما أعنيه ، إذا كان لدي 10 فئة تصدير لـ 10 طراز ، عند التنزيل ، يجب أن أضيف في 10 أماكن.
بدأت هذه المشكلة تحدث لي اليوم دون تغيير في أي تصدير. باستخدام نموذج كود leenzuur ، تم إصلاحه بعد ساعات من البحث.
التعليق الأكثر فائدة
مرحبا جميعا،
أقضي يومي لأفهم وظيفة التنزيل غير القابلة للتطبيق. يبدو أن PHPScribSheet يستخدم PHP buffer. واعتمادًا على تكوين PHP الخاص بك ، قد تتداخل بعض التحذيرات أو الأخطاء مع الإخراج.
استخدام :
يحل بالنسبة لي.
ربما ينبغي أن تساعد بعض الناس.
شكرا لك على هذه المكتبة الرائعة.