Saya mencoba mengedit file yang ada untuk digunakan sebagai template. Sekarang untuk versi ini, fungsi ini tidak dikembangkan untuk digunakan dengan mudah. Tapi saya ingin tahu apakah menggunakan fungsi di dalam plugin dan bermain dengan function resisterEvents()
saya bisa melakukannya sendiri.
Saya harus mengunduh file yang ada dan memilih selembar. Tapi bukan untuk mengeditnya.
Ini kode saya:
/**
* <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);
}
];
}
Beberapa saran?
Terimakasih banyak
Saya mencoba menambahkan info dalam nilai dengan kode ini di dalam function resisterEvents()
dan tidak berfungsi:
AfterSheet::class => function(AfterSheet $event) {
$event->sheet->setCellValue('G2', 'Hello world');
}
Dan juga untuk menambahkan data melalui function query()
Akhirnya ini berhasil untuk saya pada versi 3.1.0. Dalam versi sebenarnya 3.1.10 ini tidak berfungsi karena reopen
fungsi telah berubah. Menunggu pembaruan baru dan peningkatan pengeditan file yang ada.
->reopen()
adalah metode internal dan harus digunakan dengan hati-hati. Anda mungkin dapat mengatasinya dengan mengirimkan new LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'))
untuk membuka kembali.
Mengedit file yang ada (template) ada di peta jalan kami (versi 3.3), tetapi tanpa tanggal rilis tertentu.
Jika Anda membutuhkannya sebagai prioritas, silakan lihat bagian Dukungan Komersial kami: https://laravel-excel.com/commercial-support .
Terima kasih atas jawaban cepat ini.
Saya akan mencoba cara ini.
Ini bukan prioritas saat ini tetapi saya sedang menguji karena saya perlu menambahkan data ke excel yang ada dengan makro dan tabel dinamis, menambahkan data dan menghitung ulang rumus excel. Saya mencoba semua ini karena saya tahu ini tidak mudah dilakukan dengan excel yang kompleks.
Jika saya menemukan sesuatu yang baik, saya akan melaporkan Anda
Jika ada pembaruan, harap beri komentar sesegera mungkin
Halo, @MarFelix. Saya menghadapi masalah yang sama dan sekarang saya memiliki solusi yang saya gunakan. Ini dapat membantu Anda.
Saya menggali lebih dalam kode situs web Matt untuk memahami bagaimana ekspor dilakukan. Jadi ingat langkah-langkah ini yang digunakan untuk mengunduh file:
Excel
class lewat Export
class Anda (contoh ini menggunakan metode download
)Excel
mengidentifikasi Writer
harus digunakan dan memanggil metode export
dalam Writer
.Writer
membuka Export
(dan memanggil acara BeforeExport
), lalu mengisi lembar BARU , lalu memanggil metode write
miliknya sendiri.write
( Writer
class) akan memanggil acara BeforeWriting
dan menulis pada file untuk jenis lain selain XLSXJadi itulah mengapa BeforeWriting
tidak berfungsi, dan jika Anda menggunakannya pada BeforeExport
itu akan berhasil tetapi dalam lembar BARU .
Untuk menyiasatinya, saya menambahkan tanda pada metode untuk mendapatkan data ekspor (dalam kasus saya, FromCollection). Dengan cara ini tidak akan diproses pada langkah 2. Kemudian, pada BeforeWriting
saya menandai bendera, mendapatkan lembar yang diinginkan dan memanggil metode export
di atasnya.
Itulah kodenya:
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);
},
];
}
Lihatlah metode download
dan write
dari Maatwebsite\Excel\Writer
, itu akan sangat membantu.
Dengan informasi dan langkah-langkah ini, dimungkinkan untuk membuat solusi yang lebih kompleks.
Komentar yang paling membantu
->reopen()
adalah metode internal dan harus digunakan dengan hati-hati. Anda mungkin dapat mengatasinya dengan mengirimkannew LocalTemporaryFile(storage_path('app/public/files/mytemplate.xlsx'))
untuk membuka kembali.Mengedit file yang ada (template) ada di peta jalan kami (versi 3.3), tetapi tanpa tanggal rilis tertentu.
Jika Anda membutuhkannya sebagai prioritas, silakan lihat bagian Dukungan Komersial kami: https://laravel-excel.com/commercial-support .