Tanggal :29 Maret 2024
Codeigniter 4 export data ke excel

Belajar CodeIgniter 4 : Export data ke excel

Assalamualaikum Warahmatullahi Wabarakatuh.

Hai kawan, pada artikel ini kita akan melanjutkan belajar CodeIgniter 4 tentang export data ke excel. Kenapa kita membahas ini ? karena sejauh pengalaman saya bergelut didunia developer setiap aplikasi sistem informasi web pasti user atau pengguna meminta fitur export data ke excel. Apapun data nya baik data master ataupun data report. Nah sebagai pelayan kita wajib memberikan apa yang majikan mau 😀

Pertama kita bahas library yang akan kita gunakan, library untuk bermain excel di php cukup banyak. Diantaranya yang penulis ketahui adalah :

  1. PHPOffice
  2. Pear Excel Writer
  3. Php Export Data

Nah menurut penulis yang terpopuler dan paling banyak digunakan adalah PHPOffice, dulu nama librarynya PHPOffice/PHPExcel. Sekarang sudah dikembangkan lebih baik dengan nama PHPOffice/PHPSpreadsheet. Silahkan klik link jika ingin melihat detail repo nya di github. Yang akan kita gunakan dalam artikel ini adalah PHPSpreadsheet.

Oke sudah cukup pembahasan nya kita langsung praktek. Oh ya asumsi disini kita sudah mempunyai project CI4 ya, kalau belum silahkan buat project CI4 dulu di seperti di artikel sebelumnya.

Intalasi

Pertama kita perlu install library ke project CI4 kita, kita install menggunakan composer. jika menggunakan editor visual studio code, masuk ke menu Terminal/New Terminal lalu ketik perintah berikut :

composer require phpoffice/phpspreadsheet

Tunggu hingga proses download selesai.

Mempersiapkan Data

Kita buat contoh data sederhana untuk di export, kita buat table data_siswa. Seperti biasa buat migration terlebih dahulu, ketik perintah berikut di terminal:

php spark migrate:create create_table_siswa

maka file migration akan terbuat di folder /app/Database/Migrations/

dengan nama yyyy-mm-dd-hhmmss_create_table_siswa.php.

buka file tersebut dan tambahkan code :

public function up()
{
	$this->forge->addField([
			'id' => [
				'type'           => 'INT',
				'constraint'     => 5,
				'unsigned'       => TRUE,
				'auto_increment' => TRUE
			],
			'nama' => [
				'type'           => 'VARCHAR',
				'constraint'     => 50
			],
			'kelas' => [
				'type'           => 'VARCHAR',
				'constraint'     => 50
			],
			'jurusan' => [
				'type'           => 'VARCHAR',
				'constraint'     => 50
			],
			'angkatan' => [
				'type'           => 'VARCHAR',
				'constraint'     => 50
			],
			'nis' => [
				'type'           => 'INT',
				'constraint'     => 11
			],
			'created_at DATETIME default CURRENT_TIMESTAMP',
			'updated_at DATETIME default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'
	]);
	$this->forge->addKey('id', TRUE);
	$this->forge->createTable('data_siswa');
}

//--------------------------------------------------------------------

public function down()
{
	$this->forge->dropTable('data_siswa');
}

Lalu jalankan perintah untuk menjalankan migration :

php spark migrate

Selanjutnya buat database seeder untuk mengisi tabel data_siswa yang barusan kita buat, masuk folder app/Database/Seeds dan buat file dengan nama DataSiswaSeeder.php. buka file tersebut dan ketik code berikut :

<?php namespace App\Database\Seeds;

class DataSiswaSeeder extends \CodeIgniter\Database\Seeder
{
    public function run()
    {
        $this->db->query("INSERT INTO data_siswa (nama, kelas, jurusan, angkatan, nis )
            VALUES ('andi','XI-IPA-1','IPA','2019','11223344'),
                    ('yudi','XI-IPS-2','IPS','2019','55667788');"
        );
    }
}

dan jalankan perintah berikut untuk seeding database :

php spark db:seed DataSiswaSeeder

silahkan lihat database dengan MySQL client masing-masing, bisa pakai phpmyadmin atau lainnya, Disana sudah ada tabel data_siswa dengan data 2 siswa yang kita buat di seeder.

Kemudian membuat model data_siswa, masuk ke folder /app/Models/ dan buat file SiswaModel.php. buka file dan ketik code berikut :

<?php namespace App\Models;

use CodeIgniter\Model;

class SiswaModel extends Model
{
    protected $table = 'data_siswa';
    protected $primaryKey = 'id';
    protected $returnType = 'array';
    protected $allowedFields = ['nama', 'kelas', 'jurusan', 'angkatan', 'nis'];
    protected $useTimestamps = true;
}

Buat Controller

Selanjutnya kita buat controller berisi 2 method, 1 untuk menampilkan halaman download dan 1 lagi untuk export data ke excel. buat file di /app/Controllers/ dengan nama ExportExcel.php. dan ketik code berikut :

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class ExportExcel extends Controller
{
    //
}

Tambahkan method index() untuk menampilkan halaman download, ketik code berikut :

public function index()
{
    return view('download-excel');
}

lalu tambahkan method siswa() untuk export data siswa ke excel, sebelumnya jangan lupa tambahkan model siswa dan library PHPSpreadsheet didalam class ExportExcel seperti berikut :

use CodeIgniter\Controller;
use App\Models\SiswaModel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

dan method untuk siswa() seperti berikut :

public function siswa()
{
    $mobil = new SiswaModel();
    $dataMobil = $mobil->findAll();

    $spreadsheet = new Spreadsheet();
    // tulis header/nama kolom 
    $spreadsheet->setActiveSheetIndex(0)
                ->setCellValue('A1', 'Nama')
                ->setCellValue('B1', 'Kelas')
                ->setCellValue('C1', 'Jurusan')
                ->setCellValue('D1', 'Angkatan')
                ->setCellValue('E1', 'NIS');
    
    $column = 2;
    // tulis data mobil ke cell
    foreach($dataMobil as $data) {
        $spreadsheet->setActiveSheetIndex(0)
                    ->setCellValue('A' . $column, $data['nama'])
                    ->setCellValue('B' . $column, $data['kelas'])
                    ->setCellValue('C' . $column, $data['jurusan'])
                    ->setCellValue('D' . $column, $data['angkatan'])
                    ->setCellValue('E' . $column, $data['nis']);
        $column++;
    }
    // tulis dalam format .xlsx
    $writer = new Xlsx($spreadsheet);
    $fileName = 'Data Siswa';

    // Redirect hasil generate xlsx ke web client
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename='.$fileName.'.xlsx');
    header('Cache-Control: max-age=0');

    $writer->save('php://output');
}

untuk pejelasan code lihat dibagian yang dicomment ya 😀

Buat View Untuk Link Download

Selanjutnya kita perlu membuat button download di view, buat file di folder /app/Views/ dengan nama download-excel.php dan ketik code berikut :

<!DOCTYPE html>
<body>

<form action="<?= base_url('exportexcel/siswa') ?>" method="POST" >
    <button type="submit">Download Data Siswa</button>
</form>

</body>
</html>

view yang kita buat sebagai contoh sangat sederhana jadi silahkan menyesuaikan dengan project masing-masing.

Test Download

Nah terakhir adalah test download excel nya, jika CI4 dijalankan dilocal ketik perintah berikut untuk menjalankan server :

php spark serve

dan akses url ke http://localhost:8080/exportexcel

Akan muncul halaman seperti berikut:

klik button download data siswa dan file excel akan terdownload. Silahkan buka file Data Siswa.xls yang telah didownload dan kita sudah berhasil export data siswa ke excel, mudah bukan 😀

Oke, Cukup sekian untuk pembahasan artikel kali ini, semoga bermanfaat. Simak terus kawankoding.id untuk artikel selanjutnya.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Tukang Ketik Code

4 Comments

Tinggalkan Balasan