أحاول تحرير ملف موجود لاستخدامه كقالب. أنا الآن أنه بالنسبة لهذا الإصدار ، لم يتم تطوير هذه الوظيفة لاستخدامها بسهولة. لكني أرغب في معرفة ما إذا كان بإمكاني القيام بذلك بنفسي باستخدام الوظائف داخل المكون الإضافي واللعب بـ function resisterEvents()
.
لقد حصلت على تنزيل ملف موجود واختيار ورقة. لكن ليس لتحريره.
هذا هو الكود الخاص بي:
/**
* <strong i="16">@return</strong> array
*/
public function registerEvents(): array
{
return [
BeforeWriting::class => function(BeforeWriting $event) {
$event->writer->reopen(storage_path('app/public/files/mytemplate.xlsx'),Excel::XLSX);
$event->writer->getSheetByIndex(0);
return $event->getWriter()->getSheetByIndex(0);
}
];
}
بعض الاقتراحات؟
شكرا جزيلا
حاولت إضافة معلومات بقيمة بهذا الرمز داخل function resisterEvents()
ولا يعمل:
AfterSheet::class => function(AfterSheet $event) {
$event->sheet->setCellValue('G2', 'Hello world');
}
وأيضًا لإلحاق البيانات من خلال function query()
أخيرًا ، نجح هذا الأمر بالنسبة لي في الإصدار 3.1.0. في الإصدار الفعلي 3.1.10 ، لا يعمل هذا لأن الوظيفة reopen
قد تغيرت. في انتظار التحديثات والتحسينات الجديدة لتحرير ملف موجود.
->reopen()
طريقة داخلية ويجب استخدامها بحذر. ربما يمكنك حلها بتمرير new LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'))
لإعادة الفتح.
تحرير الملفات الموجودة (القوالب) موجود في خريطة الطريق الخاصة بنا (الإصدار 3.3) ، ولكن بدون تاريخ إصدار محدد.
إذا كنت بحاجة إليها على سبيل الأولوية ، فيرجى إلقاء نظرة على قسم الدعم التجاري لدينا: https://laravel-excel.com/commercial-support .
شكرا على هذه الإجابة السريعة.
سأحاول بهذه الطريقة.
هذه ليست أولوية في الوقت الحالي ، لكنني أختبرها لأنني سأحتاج إلى إضافة بيانات إلى ملف Excel موجود باستخدام وحدات الماكرو والجداول الديناميكية ، وإضافة البيانات وإعادة حساب صيغ Excel. أحاول كل هذا لأنني أعلم أنه ليس من السهل القيام بذلك باستخدام التفوق المعقد.
إذا وجدت شيئًا جيدًا سأبلغك
في حالة التحديث يرجى التعليق في أقرب وقت ممكن
مرحبًا @ MarFelix. كنت أواجه نفس المشكلة والآن لدي حل بديل أستخدمه. هذا قد يساعدك.
لقد حفرت بعمق في كود Mattwebsite لفهم كيفية إجراء التصدير. لذلك تذكر هذه الخطوات المستخدمة لتنزيل الملف:
Excel
لتجاوز فصلك الدراسي Export
(هذا المثال يستخدم طريقة download
)Excel
أي Writer
يجب استخدامه واستدعاء طريقة export
في هذا Writer
.Writer
الخاص بك Export
(واستدع الحدث BeforeExport
) ، ثم املأ ورقة جديدة ، ثم اتصل بالطريقة write
.write
( Writer
class) ستستدعي الحدث BeforeWriting
وتكتب في الملف لأنواع أخرى غير XLSXلهذا السبب لا يعمل BeforeWriting
، وإذا كنت تستخدمه على BeforeExport
، فسيعمل ولكن في ورقة جديدة .
للتغلب على هذه المشكلة ، أضفت علامة على طريقة الحصول على بيانات التصدير (في حالتي FromCollection). بهذه الطريقة لن تتم العملية في الخطوة 2. ثم ، في BeforeWriting
أقوم بتمييز العلم ، واحصل على الورقة المطلوبة واستدعاء طريقة export
عليها.
هذا هو الكود:
public function collection()
{
if ($this->calledByEvent) { // flag
return $this->myCollectionToExport;
}
return collect([]);
}
public function registerEvents(): array
{
return [
BeforeWriting::class => function(BeforeWriting $event) {
$templateFile = new LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'));
$event->writer->reopen($templateFile, Excel::XLSX);
$event->writer->getSheetByIndex(0);
$this->calledByEvent = true; // set the flag
$event->writer->getSheetByIndex(0)->export($event->getConcernable()); // call the export on the first sheet
return $event->getWriter()->getSheetByIndex(0);
},
];
}
ألقِ نظرة على طرق download
و write
Maatwebsite\Excel\Writer
، ستكون مفيدة جدًا.
باستخدام هذه المعلومات والخطوات ، سيكون من الممكن إنشاء حل بديل أكثر تعقيدًا.
التعليق الأكثر فائدة
->reopen()
طريقة داخلية ويجب استخدامها بحذر. ربما يمكنك حلها بتمريرnew LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'))
لإعادة الفتح.تحرير الملفات الموجودة (القوالب) موجود في خريطة الطريق الخاصة بنا (الإصدار 3.3) ، ولكن بدون تاريخ إصدار محدد.
إذا كنت بحاجة إليها على سبيل الأولوية ، فيرجى إلقاء نظرة على قسم الدعم التجاري لدينا: https://laravel-excel.com/commercial-support .