Yine bir projede bir tablodaki verileri Excel’e yazdırıp indirtmem gerekiyor ve araştırmalarım sonucunda https://laravel-excel.com sitesini buldum ve gayet güzel düzenli bir paket yaratmışlar. Detaylı döküman için https://docs.laravel-excel.com adresine bakabilirsiniz.
Bu paketi kullanbilmek için sunucu tarafında bir kaç gereklilik duyuluyor. Dökümanda şu ihtiyaçlar yazmakta.
Requirements
- PHP:
^7.0 - Laravel:
^5.5 - PhpSpreadsheet:
^1.6 - PHP extension
php_zipenabled - PHP extension
php_xmlenabled - PHP extension
php_gd2enabled
Excel paketini laravel projemize composer ile dahil ediyoruz. Terminale bu komut ile dahil edebiliriz.
composer require maatwebsite/excel
Daha sonra config/app.php dosyamızda Providers ve Aliases arraylerine şu satırları ekliyoruz.
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
Daha sonrada Excel paketinin config dosyasını publish ederek bazı değişiklikleri yapma imkanı kazanıyoruz. config/excel.php olarak dosyamız yaratılacaktır.
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
Kurulum bu kadar şimdi geçelim kullanıma. Ben bu dökümanda sadece Export kısmını anlatacağım. Import özelliğini ve diğer özellikleri yazının başında bulunan döküman sayfasından okuyabilirsiniz.
Öncelikle export işlemi oluşturduğumuz classlar üzerinden gerçekleşiyor. Her export için bir class oluşturuyoruz. Aşağıdaki komut ile yeni bir Export classı oluşturuyoruz. Ben bu yazıda Withdraw modeli için bir export işlemi yapacağım.
php artisan make:export WithdrawsExport --model=Withdraw
Bu komutu çalıştırdğımızda app dizini içerisinde Exports/WithdrawExport.php dosyası oluşacaltır ve varsayılan olarak şu şekilde gelecektir.
<?php
namespace App\Exports;
use App\Withdraw;
use Maatwebsite\Excel\Concerns\FromCollection;
class WithdrawsExport implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return Withdraw::all();
}
}
Şimdi bunu controller tarafında nasıl kullanacağımıza gelirsek Excel classı üzerinden download metodunu çalıştırarak downloads klasörüne yazdırabiliriz. download metodu 2 parametre alıyor ve ilk parametresinde bir WithdrawsExport Objesi veriyoruz, ikinci parametresinde ise indirilecek dosyasının adını veriyoruz.
use App\Exports\WithdrawsExport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
class WithdrawsController extends Controller
{
public function export()
{
return Excel::download(new WithdrawsExport, 'withdraws.xlsx');
}
}
Route oluşturup export fonksyonunu çalıştırdığımız zaman Withraw tablosundaki her satır tek tek excele yazdırılacaktır. Ancak kolon isimleri yazmayacaktır. Gelin şimdi bu kolonları yazdıralım.
Ben istediğim şekli kolayca verebilmek için HTML to Excel yapacağım yani view dosyamızda table oluşturup bunu excele yazdıracağım. Böylelikle renk verme konusunda da sorun yaşamayacağım. İlk başka oluşturduğumuz app/Exports/WithtrawsExcel.php dosyası oluşturmuştuk onu şu şekilde düzenliyoruz. ve classı artık FromCollection dan implement ekmek yerine FromView dan implement edeceğiz.
namespace App\Exports;
use App\Withdraw;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class WithdrawsExport implements FromView
{
public function view(): View
{
return view('exports.withdraws', [
'withdraws' => Withdraw::all()
]);
}
}
Böylelikle resources/views/exports/withdraws.blade.php view dosyamıza $withdraws değişkenini göndermiş oluyoruz ve bütün Withdraw satırlarını içeriyor.
Excele yazılacak olan viewi hazırlayacağız, ancak burada dikkat edilmesi gereken bir konu var oda CSS olayı. Eğer css olayını <style></stlye> tagları arasına yazarsak çalışmayacaktır. CSS leri inline olarak her tagın içerisine yazmak gerekiyor. O zaman çalışacaktır. Örnek olarak aşağıya bir tane bırakıyorum.
<table style="border-collapse: collapse;border-spacing: 0;width: 100%;">
<tr>
<th style="background-color: #3166ff;color: #ffffff;text-align: left;vertical-align: top">Sıra No</th>
<th style="background-color: #3166ff;color: #ffffff;text-align: left;vertical-align: top">Alıcı Adı Soyadı</th>
<th style="background-color: #3166ff;color: #ffffff;text-align: left;vertical-align: top">Alıcı Banka Adı</th>
<th style="background-color: #3166ff;color: #ffffff;text-align: left;vertical-align: top">Alıcı IBAN</th>
<th style="background-color: #3166ff;color: #ffffff;text-align: left;vertical-align: top">Ödenecek Net Tutar (TL)</th>
<th style="background-color: #3166ff;color: #ffffff;text-align: left;vertical-align: top">Açıklama</th>
</tr>
@foreach($withdraws as $withdraw)
<tr>
<td style="padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;width: 10px">{{ $loop->iteration }}</td>
<td style="padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;width: 25px">{{ $withdraw->owner }}</td>
<td style="padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;width: 22px">{{ $withdraw->bank }}</td>
<td style="padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;width: 30px">{{ str_replace(" ","",$withdraw->iban) }}</td>
<td style="padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;width: 25px">{{ $withdraw->amount }}</td>
<td style="padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;width: 17px"></td>
</tr>
@endforeach
</table>
Bu noktadan sonra yine daha önceden oluşturmuş olduğumuz rotaya girerek export fonksyonunu çalıştıracağız ve WithdrawExcel classının içerisindeki view() fonksyonu otomatik olarak çalışmış olacaktır. Dolayısıyla view içerisindeki şekil excele yazılacaktır.
Eğer indirmek yerine sadece diskte tutmak istiyorsanız, Excel::download() fonksyonu yerine Excel::store() fonksyonunu kullanabilirsiniz. parametreler aynı şekilde kalıyor, indirmek yerine sadece diske yazıp bırakıyor.
İlk Yorumu Siz Yapın