Export Excel Laravel – Halo semuanya, di postingan sebelumnya yaitu tentang Cara Membuat Package Laravel Sendiri dan Publish ke Packagist, saya memberikan beberapa rekomendasi package yang wajib kamu install..
Salah satunya adalah package besutan MaatWebsite yang bisa digunakan untuk export data ke Excel..
Bagi kamu yang sedang mendevelop sebuah system dan sudah mulai masuk kedalam modul report, pasti client juga meminta agar report tersebut dapat di export kedalam excel..
Tujuan nya adalah agar data-data yang ada di system, dapat mereka olah kembali secara manual di Microsoft Excel..
Atau agar data tersebut dapat disimpan dan dikirim ke pihak lain..
Itulah mengapa pada setiap report sebetulnya wajib ada fitur untuk export data nya kedalam excel..
Kalau begitu tanpa banyak basa basi lagi, langsung saya kita mulai..
Persiapan Export Excel Laravel
Ada beberapa hal yang perlu kamu persiapkan..
Untuk tutorial kali ini, saya menggunakan:
- Laravel versi 8
- MaatWebsite Laravel/Excel versi 3.1
- PHP Versi 7.4.3
- Dan text editor Visual Studio Code (*optional)
Install Laravel
Silahkan kalian lakukan instalasi Laravel nya terlebih dahulu, bisa kalian kunjungi halaman resmi website laravel nya disini..
Saya sendiri menggunakan Laravel versi 8..
Konfigurasi Database
Setelah instalasi Laravel nya sudah selesai, sekarang kita konfigurasi database nya terlebih dahulu..
Silahkan kamu buat database terlebih dahulu dengan nama “sangcahayaid”..
Kemudian didalam nya kamu buat sebuah table baru dengan nama “tbl_siswa”..
Untuk struktur dari table nya adalah seperti berikut:
Kemudian kalian hubungkan database tersebut dengan project laravel nya pada file .env, silahkan kalian sesuaikan nama database nya, username, password, dan host nya..
Buat Data Dummy
Sekarang kita buat data dummy terlebih dahulu untuk data siswa nya, supaya didalam table “tbl_siswa” nya ga kosong banget..
Karena kita butuh data untuk dapat melakukan export excel nya..
Untuk mengisi data dummy, kita sudah pernah membahasnya disini, silahkan kalian kunjungi Belajar Seeding dan Faker di Laravel dari 0..
Maka nanti hasil data dummy nya akan seperti ini:
Keren kan? Data dummy tapi seperti data asli.. Itulah kehebatan dari Faker..
Membuat model untuk table siswa nya..
Sekarang, setelah table nya terbentuk dan sudah terisi dengan data dummy, kita buat terlebih dahulu sebuah model untuk mewakili table tersebut, jalankan perintah berikut:
php artisan make:model TblSiswa
Setelah perintah tersebut dijalankan, nanti akan tercipta sebuah file model baru, dibuka saja file tersebut dan modifikasi sedikit seperti ini:
../App/Models/TblSiswa.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class TblSiswa extends Model { use HasFactory; protected $table = 'tbl_siswa'; protected $guarded = []; public $timestamps = false; }
Instalasi Package MaatWebsite Laravel Excel
Sekarang kita akan lakukan instalasi Package nya terlebih dahulu..
Buka CMD/Terminal kalian, arahkan ke project directory nya, kemudian jalankan perintah berikut:
composer require maatwebsite/excel
Tunggu beberapa saat sampai proses intalasi nya selesai..
Setelah itu, kita perlu melakukan sedikit konfigurasi pada file “../config/app.php”..
Pada Bagian provider, kamu tambahkan script berikut:
'providers' => [ /* * Package Service Providers... */ Maatwebsite\Excel\ExcelServiceProvider::class, ]
Kemudian pada bagian aliases, kamu tambahkan script berikut:
'aliases' => [ ... 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ]
Instalasi dan Konfigurasi nya sudah selesai sampai sini, sekarang kita lanjut untuk cara penggunaan nya..
Cara Export Excel Laravel
Nah sekarang akan kita coba lakukan export excel nya, nanti akan kita lakukan dengan berbagai macam cara, mulai dari yang basic, sampai dengan yang banyak kondisi..
Kita mulai dari cara basic terlebih dahulu yaa..
Penggunaan Dasar
Untuk laravel/excel versi 3, kita perlu membuat sebuah class baru didalam app/Exports..
Tapi kita bisa membuat nya dengan menggunakan command artisan, di CMD atau Terminal kalian tinggal jalankan perintah berikut:
php artisan make:export SiswaExport --model=TblSiswa
Jangan lupa yaa, kalian jalankan perintah tersebut didalam folder root project nya, jadi CMD/Terminal kalian, kalian arahkan dulu ke folder project nya..
Maka nanti akan tercipta sebuah file baru didalam folder ../app/Exports
Kalo kalian buka file tersebut, isinya akan seperti ini:
<?php namespace App\Exports; use App\Models\TblSiswa; use Maatwebsite\Excel\Concerns\FromCollection; class SiswaExport implements FromCollection { /** * @return \Illuminate\Support\Collection */ public function collection() { return TblSiswa::all(); } }
Intinya sih pada script di atas, akan mengexport semua data yang berada didalam table “TblSiswa”..
Nah nanti file export tersebut akan kita panggil didalam controller nya..
Sekarang kita buatkan dulu file Controller nya, jalankan perintah:
php artisan make:controller ExportController
Maka nanti akan tercipta file controller baru yang berada di:
App\Http\Controllers\ExportController
Dibuka aja dan isi seperti berikut:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Exports\SiswaExport; use Maatwebsite\Excel\Facades\Excel; class ExportController extends Controller { public function index() { return Excel::download(new SiswaExport, 'users.xlsx'); } }
Coba kamu perhatikan script diatas..
- Pada baris ke-7, kita memanggil file Class SiswaExport nya yang sebelumnya sudah kita buat
- Kemudian pada baris ke-8, kita panggil Class Package nya
- Dan didalam class ExportController kita membuat sebuah function baru dengan nama index, dimana nanti function ini akan kita buatkan route nya di web.php
- Pada baris ke 14 adalah script cara penggunaan export data ke excel nya, dimana kita menggunakan class SiswaExport yang sebelumnya sudah kita panggil.. Parameter kedua kita isi dengan nama file nya..
Kemudian kita buatkan route untuk proses export data nya..
Kalian buka file web.php, dan buat route baru seperti berikut:
../routes/web.php
.... Route::get('export-data', [ExportController::class, 'index']); ....
Route diatas memiliki spesifikasi seperti berikut:
- url nya mengarah ke: “../export-data”..
- Menggunakan file Controller ExportController
- Dan mengarah ke function index, ini disesuaikan dengan yang sudah kita buat sebelumnya..
Sekarang kalian coba akses url route tersebut, jika berhasil seharusnya secara otomatis akan menghasilkan file excel..
http://127.0.0.1:8000/export-data
Kalo kamu buka file tersebut, hasilnya akan seperti ini:
File tersebut memiliki struktur sebagai berikut:
- Kolom pertama adalah ID nya
- Kolom kedua adalah Alamat
- Kolom ketiga adalah Nama
- Kolom keempat adalah Email
- Kolom kelima adalah No HP
Cuma kelemahan dari cara ini yaitu tidak terdapat header pada file tersebut, dan kita juga tidak bisa mengatur atau merubah posisi dari masing-masing kolom nya..
Merubah Format File Excel nya
Kita juga bisa mengganti format file yang di export ke berbagai macam extension, cara nya kita tinggal merubah saja nama extension nya yang ada di parameter kedua pada script di controller nya..
Export ke format .xlsx
public function index() { return Excel::download(new SiswaExport, 'siswas.xlsx'); }
Export ke Format .csv
public function index() { return Excel::download(new SiswaExport, 'siswas.csv'); }
Export ke Format .tsv
public function index() { return Excel::download(new SiswaExport, 'siswas.tsv'); }
Export ke Format .ods
public function index() { return Excel::download(new SiswaExport, 'siswas.ods'); }
Export ke Format .xls
public function index() { return Excel::download(new SiswaExport, 'siswas.xls'); }
Export ke Format .html
public function index() { return Excel::download(new SiswaExport, 'siswas.html'); }
Filter Data Export Dengan Kondisi Where
Terkadang kita gak ingin semua data nya ter export, tapi hanya ingin beberapa data saja dengan kondisi tertentu..
Nah kita juga bisa menambahkan beberapa query sebelum melakukan proses export data nya, agar data yang ketarik bisa kita sesuaikan sesuai dengan kebutuhan..
Misalkan sekarang kita sebagai contoh ingin mengexport data siswa yang hanya mengandung kata “putri” saja..
Untuk cara nya adalah seperti berikut
Pertama kita modifikasi dulu pada file SiswaExport nya hingga menjadi seperti berikut..
../App/Exports/SiswaExport.php
<?php namespace App\Exports; use App\Models\TblSiswa; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\FromQuery; class SiswaExport implements FromQuery { /** * @return \Illuminate\Support\Collection */ public function __construct(string $keyword) { $this->nama = $keyword; } public function query() { return TblSiswa::query()->where('nama', 'like', '%' . $this->nama . '%'); } }
Coba kamu perhatikan script diatas
- Pada baris ke-7, kita memanggil Class ..\FromQuery
- Pada baris ke-9 kita implementasikan di Class nya
- Pada baris ke-14 kita membuat sebuah function __construct, ini untuk menangkap parameter yang nanti dikirim melalui controller nya, sebagai contoh disini kita akan menangkap sebuah keyword untuk filter nama siswa nya
- Pada baris ke-19 adalah cara untuk export nya
- Pada baris ke-21, Kita bisa menambahkan query kondisi setelah memanggil method query()
Kemudian pada file ExportController nya kalian rubah juga seperti berikut:
public function index() { return Excel::download(new SiswaExport('putri'), 'siswas.xls'); }
Diatas kita hanya tinggal menambahkan parameter aja sebagai keyword untuk filter export data siswa nya..
Sekarang coba kalian akses lagi url “127.0.0.1:8000/export-data”, maka seharusnya data yang ter-export adalah data yang nama siswa nya hanya mengandung “putri” saja..
Export Data From View
Dari tadi kita melakukan export data belum ada Header nya, padahal Header ini sangat penting bagi user agar bisa dengan mudah membaca jenis kolom nya..
Untuk bisa memberikan header, kita perlu metode untuk export data berdasarkan file view, nanti dari view tersebut kita juga bisa mengubah urutan kolom nya..
Misalkan sebagai contoh kita ingin menghilangkan kolom ID, menggeser kolom nama menjadi paling sebelah kiri dan kolom alamat menjadi paling sebelah kanan..
Kita ubah file SiswaExport nya terlebih dahulu menjadi seperti berikut:
<?php namespace App\Exports; use App\Models\TblSiswa; use Illuminate\Contracts\View\View; use Maatwebsite\Excel\Concerns\FromView; class SiswaExport implements FromView { /** * @return \Illuminate\Support\Collection */ public function __construct(string $keyword) { $this->nama = $keyword; } public function view(): View { return view('siswas.export', [ 'data' => TblSiswa::where('nama', 'like', '%' . $this->nama . '%')->get() ]); } }
Coba kamu perhatikan script diatas:
- Pada baris ke-7 dan ke-8, kita memanggil class baru yaitu View dan FromView
- Pada baris ke-10 kita implementasikan class FromView nya
- Pada baris ke-22, kita me return nya ke sebuah view “siswas.export” dan mem-passing object data kedalam view tersebut, yang mana object data tersebut berisi query untuk get data siswa nya
Sekarang berarti selanjutnya kamu buat view baru dengan nama export.blade.php dengan struktur seperti berikut:
../resources/views/siswas/export.blade.php
Dan isi seperti berikut:
<table> <thead> <tr> <th>Nama</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> </tr> </thead> <tbody> @foreach ($data as $dt) <tr> <td>{{ $dt->nama }}</td> <td>{{ $dt->no_hp }}</td> <td>{{ $dt->email }}</td> <td>{{ $dt->alamat }}</td> </tr> @endforeach </tbody> </table>
Sekarang coba kamu akses lagi url “127.0.0.1:8000/export-data”, maka nanti seharusnya file exportan nya sudah ada header nya, dan struktur table nya sesuai dengan yang sudah kita buat pada file view nya..
Export Data dengan Multiple Sheet
Sekarang kita akan coba export data excel dengan multiple sheets..
Sebagai contoh, kita akan membuat 2 buah sheet dalam 1 file, dimana sheet pertama untuk menampung nama siswa aja, dan sheet kedua untuk menampung no hp nya si siswa aja..
Kita perlu membuat folder baru bernama Sheets didalam “/app/Exports”, kemudian didalam nya buat 2 file baru yaitu SheetNama.php dan SheetNoHp.php..
../app/Exports/Sheets/SheetNama.php ../app/Exports/Sheets/SheetNoHp.php
Kedua file tersebut, kita isi seperti berikut:
SheetNama.php:
<?php namespace App\Exports\Sheets; use App\Models\TblSiswa; use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithTitle; class SheetNama implements FromQuery, WithTitle { /** * @return \Illuminate\Support\Collection */ private $nama; public function __construct(string $nama) { $this->nama = $nama; } /** * @return Builder */ public function query() { return TblSiswa ::query() ->where('nama', 'like', '%' . $this->nama . '%')->select('nama'); } /** * @return string */ public function title(): string { return 'Nama'; } }
SheetNoHp.php:
<?php namespace App\Exports\Sheets; use App\Models\TblSiswa; use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithTitle; class SheetNoHp implements FromQuery, WithTitle { /** * @return \Illuminate\Support\Collection */ private $nama; public function __construct(string $nama) { $this->nama = $nama; } /** * @return Builder */ public function query() { return TblSiswa ::query() ->where('nama', 'like', '%' . $this->nama . '%')->select('no_hp'); } /** * @return string */ public function title(): string { return 'No HP'; } }
Kemudian file SiswaExport.php nya juga perlu kamu rubah seperti berikut:
../app/Exports/SiswaExport.php
<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\WithMultipleSheets; use App\Exports\Sheets\SheetNama; use App\Exports\Sheets\SheetNoHp; class SiswaExport implements WithMultipleSheets { /** * @return \Illuminate\Support\Collection */ public function __construct(string $keyword) { $this->nama = $keyword; } public function sheets(): array { $sheets = []; $sheets[] = new SheetNama($this->nama); $sheets[] = new SheetNoHp($this->nama); return $sheets; } }
Coba kamu perhatikan script diatas:
- Baris ke-5 kita memanggil Class WithMultipleSheets, yang mana kemudian kita implementasikan pada class SiswaExport dibaris ke-10..
- Baris ke-7 dan ke-8 kita panggil 2 class Sheet yang sebelumnya sudah kita buat
- Kemudian pada baris ke-20, kita memiliki function sheet, yang mana isi nya yaitu perwakilan dari masing-masing sheet..
Sekarang coba kamu akses lagi url berikut:
http://127.0.0.1:8000/export-data
Maka nanti hasil exportan file nya adalah seperti berikut, sudah terdapat 2 sheet didalam nya..
Akhir Kata
Sekian untuk tutorial export data excel nya pada Framework Laravel, semoga bermanfaat dan Terima Kasih..
Support Us
Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid
Terima kasih..
[…] Update, mimin sudah buatkan tutorial lengkap export data excel nya, bisa kamu kunjungi disini.. […]
[…] Excel Laravel – Halo semuanya, setelah sebelumnya kita sudah mempelajari tentang bagaimana cara export data ke excel dari mysql, sekarang kita akan coba melakukan kebalikan nya, yaitu import data ke mysql via file […]