Cara menggunakan phpspreadsheet cell caching

Fitur export ke dalam format excel itu merupakan salah satu fitur yang biasa terdapat pada program yang kita buat. Biasanya fitur ini digunakan dalam modul reporting atau pembuatan laporan. Meski program kita sudah bisa mencetak laporan langsung, adakalanya pengguna itu memerlukan laporan dalam format yang berbeda, misalnya dalam format excel maupun pdf. Untuk memenuhi kebutuhan tersebut, edisi tutorial CodeIgniter 4 ini akan membahas tentang membuat fitur export excel di framework CodeIgniter 4 menggunakan salah satu library yang sering digunakan untuk menghandle excel yaitu library PhpSpreadsheet.

PhpSpreadsheet ini adalah sebuah library yang ditulis menggunakan bahasa pemrograman PHP dan menyediakan beberapa class yang memudahkan kita untuk menulis dan membaca file spreasheet dalam format seperti excel dan LibreOffice Calc. Kawan, dalam tutorial ini kita akan coba class untuk menuliskan file excel. FYI, Selain format excel, ada beberapa format file yang disupport library ini. Untuk menulis, library ini mendukung format Open Document/OASIS (.ods), Office Open Xml (.xlsx) Excel 2007 ke atas, BIFF 8 (.xls) Excel 97 ke atas dan lain-lain. Karena di tutorial export to excel CodeIgniter sebelumnya itu tanpa library apapun dan tampaknya banyak yang tidak bisa buka file excel hasil generate dari codingannya, di tutorial ini saya mencoba menggunakan cara yang berbeda untuk membuat fitur export dalam format excel.

Web App Overview

Di tutorial CodeIgniter 4 edisi membuat fitur export excel menggunakan library PhpSpreadsheet ini kita akan membuat project sederhana. Ketika kita uji coba, project ini awalnya menampilkan sebuah halaman yang di dalamnya terdapat button untuk proses export ke format excel. Ketika button ini diklik, project akan memulai proses export ke excel dan meng-generate file excel sebagai outputnya.

Persiapan

Kawan, sebelum memulai, pastikan sudah terdapat project CodeIgniter 4 yang sudah terdapat sample data. Kalau belum ada, kawan-kawan boleh mengikuti tutorial sebelumnya untuk persiapan.

Task 1: Install library PHPSpreadSheet

Kawan, hal pertama yang akan kita lakukan adalah menginstall library. Seperti proses instalasi CodeIgniter 4, kita pakai composer untuk menginstall library PHPSpreadsheet. Buka terminal lalu run command ini ya..

composer require phpoffice/phpspreadsheet

Selanjutnya kita tunggu sampai proses instalasi selesai.

Task 2: Membuat fitur export ke excel

Library PhpSpreadsheet sudah kita install, langkah selanjutnya adalah membuat fitur export ke excel.

Kita buat dulu model class sesuai dengan sample data yang kita punya. Buat file baru dengan nama UsersModel.php di direktori app/Models/. Di dalam file UsersModel.php kita deklarasikan class model UsersModel.

<?php

namespace App\Models;

use CodeIgniter\Model;

class UsersModel extends Model
{
    protected $table = 'users';
}

Setelah selesai, save kembali file UsersModel.php.

Selanjutnya kita buat controller yang akan menghandle proses export. Buat file baru dengan nama User.php. di direktori app/Controllers/. Kemudian kita deklarasikan class controller User.php di dalam file User.php.

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\UsersModel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class User extends BaseController
{
  // isi class User
}

Selanjutnya kita buat method baru untuk menghandle proses export ke excel.

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\UsersModel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class User extends BaseController
{

    public function export()
    {
        $userModel = new UsersModel();
        $users = $userModel->findAll();

        $spreadsheet = new Spreadsheet();

        $spreadsheet->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Nama')
            ->setCellValue('B1', 'Email')
            ->setCellValue('C1', 'Tanggal dibuat');

        $column = 2;

        foreach ($users as $user) {
            $spreadsheet->setActiveSheetIndex(0)
                ->setCellValue('A' . $column, $user['name'])
                ->setCellValue('B' . $column, $user['email'])
                ->setCellValue('C' . $column, $user['created_at']);

            $column++;
        }

        $writer = new Xlsx($spreadsheet);
        $filename = date('Y-m-d-His'). '-Data-User';

        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');
    }
}

Save kembali file User.php.

Kawan, pada tahapan ini kita sudah bisa melakukan proses export ke excel. Hanya saja kita mesti menuliskan urlnya langsung di address bar browser untuk mengaksesnya. Supaya lebih mudah untuk proses uji coba, kita buat user interfacenya.

Task 3: Membuat halaman untuk download hasil export

Buka kembali file controller User.php, kita tambahkan method index() untuk menampilkan halaman untuk export ke excel.

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\UsersModel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class User extends BaseController
{
    public function index()
    {
        return view('index');

    }

    // baris kode selanjutnya..

}

Sehingga keseluruhan class controller User menjadi seperti berikut ini.

<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\UsersModel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class User extends BaseController
{
    public function index()
    {
        return view('index');

    }

    public function export()
    {
        $userModel = new UsersModel();
        $users = $userModel->findAll();

        $spreadsheet = new Spreadsheet();

        $spreadsheet->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Nama')
            ->setCellValue('B1', 'Email')
            ->setCellValue('C1', 'Tanggal dibuat');

        $column = 2;

        foreach ($users as $user) {
            $spreadsheet->setActiveSheetIndex(0)
                ->setCellValue('A' . $column, $user['name'])
                ->setCellValue('B' . $column, $user['email'])
                ->setCellValue('C' . $column, $user['created_at']);

            $column++;
        }

        $writer = new Xlsx($spreadsheet);
        $filename = date('Y-m-d-His'). '-Data-User';

        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');
    }
}

Uji Coba

Untuk uji coba, kita running dulu project kita. Buka terminal lalu run command berikut ini.

php spark serve

Selanjutnya buka browser, ketik url di addressbar.

http://localhost:8080/user

Project kita akan menampilkan halaman yang berisi tulisan dan juga button untuk proses export ke excel. Selanjutnya kita klik button Export excel untuk memulai proses export ke excel.

Ya kita bisa lihat file excelnya bisa kita download.

Penutup

Di edisi tutorial kali ini kita sudah coba membuat fitur untuk export ke dalam format excel menggunakan library PhpSpreadsheet. Kita coba untuk menuliskan file excel menggunakan class Writer dari library PhpSpreadsheet, yaitu class PhpOffice\PhpSpreadsheet\Writer\Xlsx. Dan setelah proses uji coba, berbeda dengan tutorial sebelumnya, di tutorial kali ini kita sudah bisa menuliskan dan menggenerate file excel (untuk saat ini) tanpa ada kendala.

Meski sample code yang dicontohkan masih sederhana, semoga memudahkan kamu untuk memahami dasar pengembangan fitur yang menggunakan library. Semoga bermanfaat dan sampai jumpa di edisi tutorial berikutnya.