Codeigniter 4 Export file PHPExcel
Codeigniter 4 Export file PHPExcel

Tutorial Codeigniter 4 Export Excel – menampilkan atau meng-ekspor data dari database dalam bentuk format laporan Excel terkadang menjadi hal yang sangat penting dalam aplikasi dan hal ini tidak dapat kita hindari sebagai seorang programmer. Ya, tentu hal ini digunakan untuk kebutuhan fitur pelaporan data dalam aplikasi. Oleh karena itu pada kesempatan kali ini saya ingin berbagi tutorial dengan Anda tentang bagaimana cara membuat laporan data dari database MySQL misalnya kedalam file laporan PHP Excel Codeigniter 4.

Membuat fitur laporan Export Excel Codeigniter 4 untuk menampilkan data dari database MySQL misalnya ke dalam format laporan file Excel menggunakan PHP Codeigniter 4 pada tutorial kali ini akan menggunakan bantuan library PHPExcel.

Dalam membuat laporan Codeigniter 4 Export PHPExcel PADA kali ini saya masih menggunakan project Codeigniter 4 sebelumnya pada pembahasan “Codeigniter 4 CRUD Application Data Pegawai Dengan Modals Boostrap“, sehingga disini saya tidak melakukan instalasi project framework Codeigniter 4 dari awal, adapun data yang akan kita gunakan disini adalah data dari tabel pegawai yang sudah tersedia pada tutorial tersebut.

Berikut adalah langkah demi langkah untuk melakukan export data dari database MySQL ke file Excel menggunakan Codeigniter 4 dan library PHPExcel.

Langkah pertama, adalah download library PHPExcel, lalu ekstrak hasil download ke folder project Codeigniter 4 pada folder “app\ThirdParty\PHPExcel”, sehingga strukturnya akan terlihat seperti berikut :

Langkah ke dua, adalah memanggil library PHPExcel secara autoload melalui file “app\Config\Autoload.php” pada baris perintah berikut :

$classmap = [
'PHPExcel' => APPPATH.'ThirdParty/PHPExcel/PHPExcel.php',
];

Setelah langkah pertama dan kedua telah kita lakukan, langkah selanjutnya adalah membuat tombol export excel pada file view pada folder “app\Views\pegawai\index.php”, buka file “index.php” lalu lakukan modifikasi dengan menambahkan tombol export seperti berikut :

<button class="btn btn-sm btn-success export"><i class="fa fa-file"></i> Export</button>

Perhatikan pada tombol button diatas saya menyertakan class export pada button.

Kemudian langkah selanjutnya adalah menambahkan perintah script untuk menjalankan tombol export pada file script pada folder “app\Views\pegawai\script.php”. Buka kembali file “script.php” lalu lakukan modifikasi dengan menambahkan kode script berikut :

$('.export').on("click",function() {
window.location = "<?php echo base_url("public/pegawai/export"); ?>";
});

Lalu lakukan langkah berikutnya dengan melakukan modifikasi pada file controller pegawai pada folder “app\Controllers\Pegawai.php”, pada tahap ini kita akan menambahkan satu buah method dengan nama export() dimana method() ini nantinya akan kita gunakan untuk meng-generate file export PHPExcel. Buka file controller “Pegawai.php” lalu tambahkan code seperti berikut :

    public function export()
    {                       
        $object = new PHPExcel();
        $object->setActiveSheetIndex(0);        
        $kolom= ['ID','Nama','Tanggal Lahir','Pekerjaan','Email','Alamat'];     
        $column = 0;
        foreach($kolom as $field)
        {           
            $object->getActiveSheet()->setCellValueByColumnAndRow($column, 1, $field);
            $column++;
        }
        $db = \Config\Database::connect();
        $builder = $db->table('pegawai'); 
        $query = $builder->get();       
        $excel_row = 2;
        foreach ($query->getResult('array') as $row){
            $hasil = array_values($row);
            $kolom = sizeof($row);
            for($i=0;$i<$kolom;$i++){               
                $object->getActiveSheet()->setCellValueByColumnAndRow($i, $excel_row, $hasil[$i]);  
            }   
            $excel_row++;           
        }
                     
        $writer = PHPExcel_IOFactory::createWriter($object, 'Excel2007');
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="DataPegawai.xlsx"');
        $writer->save('php://output');
    }

Jika semua langkah diatas telah kita implementasikan pada project Codeigniter 4, maka saatnya kita lakukan uji coba apakah fungsi export PHPExcel dengan Codeigniter 4 disini dapat berjalan dengan sempurna. Oke sekarang jalankan project Anda melalui web browser, jika berjalan dengan baik maka akan kita jumpai tombol Export pada halaman data pegawai seperti berikut :

Codeigniter 4 Export PHPExcel Tombol Export
Codeigniter 4 Export PHPExcel Tombol Export

Dan jika kita klik tombol Export excel tersebut maka akan meng-generate file excel seperti berikut :

Codeigniter 4 Export file PHPExcel
Codeigniter 4 Export file PHPExcel

Lalu jika file excel hasil export tersebut kita buka maka akan kita jumpai data-data pegawai pada file excel seperti berikut :

Codeigniter 4 Export PHPExcel Jogjatech
Codeigniter 4 Export PHPExcel Jogjatech

Adapun secara lengkap, file-file project Codeigniter 4 Export PHPExcel secara lengkap akan terlihat seperti berikut :
app\Config\Autoload.php

<?php namespace Config;
require_once SYSTEMPATH . ‘Config/AutoloadConfig.php’;
/**
 * ——————————————————————-
 * AUTO-LOADER
 * ——————————————————————-
 * This file defines the namespaces and class maps so the Autoloader
 * can find the files as needed.
 */
class Autoload extends \CodeIgniter\Config\AutoloadConfig
{
    public $psr4 = [];
    public $classmap = [];
    //——————————————————————–
    /**
     * Collects the application-specific autoload settings and merges
     * them with the framework’s required settings.
     *
     * NOTE: If you use an identical key in $psr4 or $classmap, then
     * the values in this file will overwrite the framework’s values.
     */
    public function __construct()
    {
        parent::__construct();
        /**
         * ——————————————————————-
         * Namespaces
         * ——————————————————————-
         * This maps the locations of any namespaces in your application
         * to their location on the file system. These are used by the
         * Autoloader to locate files the first time they have been instantiated.
         *
         * The ‘/app’ and ‘/system’ directories are already mapped for
         * you. You may change the name of the ‘App’ namespace if you wish,
         * but this should be done prior to creating any namespaced classes,
         * else you will need to modify all of those classes for this to work.
         *
         * DO NOT change the name of the CodeIgniter namespace or your application
         * WILL break. *
         * Prototype:
         *
         *   $Config[‘psr4’] = [
         *       ‘CodeIgniter’ => SYSPATH
         *   `];
         */
        $psr4 = [
            ‘App’         => APPPATH,                // To ensure filters, etc still found,
            APP_NAMESPACE => APPPATH,                // For custom namespace
            ‘Config’      => APPPATH . ‘Config’,
        ];
        /**
         * ——————————————————————-
         * Class Map
         * ——————————————————————-
         * The class map provides a map of class names and their exact
         * location on the drive. Classes loaded in this manner will have
         * slightly faster performance because they will not have to be
         * searched for within one or more directories as they would if they
         * were being autoloaded through a namespace.
         *
         * Prototype:
         *
         *   $Config[‘classmap’] = [
         *       ‘MyClass’   => ‘/path/to/class/file.php’
         *   ];
         */
        $classmap = [
            ‘PHPExcel’ => APPPATH.’ThirdParty/PHPExcel/PHPExcel.php’,
        ];
        //——————————————————————–
        // Do Not Edit Below This Line
        //——————————————————————–
        $this->psr4     = array_merge($this->psr4, $psr4);
        $this->classmap = array_merge($this->classmap, $classmap);
        unset($psr4, $classmap);
    }
    //——————————————————————–
}

app\Views\pegawai\index.php

<div class=”right_col” role=”main”>
    <div class=””>
        <div class=”row”>
            <div class=”col-md-12 col-sm-12 col-xs-12″>
            <div class=”x_panel”>
                <div class=”x_title”>
                <button class=”btn btn-sm btn-primary” data-toggle=”modal” data-target=”#formModal”><i class=”fa fa-plus”></i> Tambah</button>
                <button class=”btn btn-sm btn-success export”><i class=”fa fa-file”></i> Export</button>
                <div class=”clearfix”></div>
                </div>
                <div class=”x_content”>
                <table id=”datatable” class=”table table-striped table-bordered”>
                    <thead>
                    <tr>
                        <th>No</th>
                        <th>Nama</th>
                        <th>Tanggal Lahir</th>
                        <th>Pekerjaan</th>
                        <th>Email</th>
                        <th>Alamat</th>
                        <th>Aksi</th>
                    </tr>
                    </thead>
                    <tbody>
                    <?php echo $table;?>
                    </tbody>
                </table>
                </div>
            </div>
            </div>
        </div>
    </div>
</div>
<!– modal –>
<div class=”modal” id=”formModal” tabindex=”-1″ role=”dialog”>
  <div class=”modal-dialog modal-xs” role=”document”>
    <div class=”modal-content”>
      <div class=”modal-header”>
        <h5 class=”modal-title”>Form Data Pegawai</h5>
        <button type=”button” class=”close” data-dismiss=”modal” aria-label=”Close”>
          <span aria-hidden=”true”>&times;</span>
        </button>
      </div>
      <div class=”modal-body”>
        <form name=”frm_data” id=”frm_data” method=”POST” action=”<?php echo base_url(‘public/pegawai/simpan’);?>”>
            <div class=”form-group”>
                <label>Nama Lengkap</label>
                <input type=”text” class=”form-control” name=”nama” id=”nama” placeholder=”Nama Lengkap”>
            </div>
            <div class=”form-group”>
                <label>Tanggal Lahir</label>
                <input type=”text” class=”form-control date” name=”tanggal_lahir” id=”tanggal_lahir” placeholder=”2020-09-27″>
            </div>
            <div class=”form-group”>
                <label>Pekerjaan</label>
                <input type=”text” class=”form-control” name=”pekerjaan” id=”pekerjaan” placeholder=”Pekerjaan”>
            </div>
            <div class=”form-group”>
                <label>E-mail</label>
                <input type=”email” class=”form-control” name=”email” id=”email” placeholder=”E-mail”>
            </div>
            <div class=”form-group”>
                <label>Alamat</label>
                <input type=”text” class=”form-control” name=”alamat” id=”alamat” placeholder=”Alamat”>
            </div>
            <div class=”modal-footer”>
                <input type=”hidden” name=”id”>
                <button type=”button” class=”btn btn-secondary” data-dismiss=”modal”>Close</button>
                <button type=”submit” class=”btn btn-primary”>Save</button>
            </div>
        </form>
      </div>
    </div>
  </div>
</div>

app\Views\pegawai\script.php

<script>
$(document).ready(function(){
    $(‘#datatable’).dataTable();
    $(‘.edit’).on(‘click’,function(){
        var cek = $(this).attr(‘data-id’);
        $.ajax({
            url:”<?php echo base_url();?>/public/pegawai/edit/”+cek,
            type:”GET”,
            dataType:”JSON”,
            success: function(data){
                $(“#frm_data”).find(“input[name=id]”).val(data.id_pegawai);
                $(“#frm_data”).find(“input[name=nama]”).val(data.nama);
                $(“#frm_data”).find(“input[name=tanggal_lahir]”).val(data.tanggal_lahir);
                $(“#frm_data”).find(“input[name=pekerjaan]”).val(data.pekerjaan);
                $(“#frm_data”).find(“input[name=email]”).val(data.email);
                $(“#frm_data”).find(“input[name=alamat]”).val(data.alamat);
                $(‘#formModal’).modal(‘show’);
            }
        });
    });
    $(‘.hapus’).on(‘click’,function(){
        var cek = $(this).attr(‘data-id’);
        $.ajax({
            url:”<?php echo base_url();?>/public/pegawai/hapus/”+cek,
            type: “POST”,
            success: function(msg){
                //jika berhasil menghapus maka akan di redirect ke url dibawah
                window.location.href= “<?php echo base_url();?>/public/pegawai”;
            }
        });
    });
    //export excel
    $(‘.export’).on(“click”,function() {
        window.location = “<?php echo base_url(“public/pegawai/export”); ?>”;
    });
    $(‘.date’).daterangepicker({
                  singleDatePicker: true,
                  calender_style: “picker_1”,
                  format: ‘YYYY-MM-DD’,
                  minDate: ‘2020-01-01’,
                  maxDate: ‘2020-12-31’,
            });
});
</script>

app\Controllers\Pegawai.php

<?php namespace App\Controllers;
use PHPExcel;
use PHPExcel_IOFactory;
class Pegawai extends BaseController
{
    public function index()
    {
        $db = \Config\Database::connect();
        $builder = $db->table(‘pegawai’);
        $query = $builder->get();
        $hasil[‘table’] =”;
        $no=1;
        foreach ($query->getResult(‘array’) as $row)
        {
            $hasil[‘table’] .='<tr>
                                <td>’.$no++.'</td>
                                <td>’.$row[‘nama’].'</td>
                                <td>’.$row[‘tanggal_lahir’].'</td>
                                <td>’.$row[‘pekerjaan’].'</td>
                                <td>’.$row[’email’].'</td>
                                <td>’.$row[‘alamat’].'</td>
                                <td>
                                    <button type=”button” class=”btn btn-xs btn-success edit” data-id=”‘.$row[‘id_pegawai’].'” title=”Edit”><i class=”fa fa-pencil”></i></button>
                                    <button type=”button” class=”btn btn-xs btn-danger hapus” data-id=”‘.$row[‘id_pegawai’].'” title=”Hapus”><i class=”fa fa-trash”></i></button>
                                </td>
                            </tr>’;
        }
        $data[‘script’] = view(‘pegawai/script’);
        $data[‘content’] = view(‘pegawai/index’,$hasil);
        return view(‘template/_template’,$data);
    }
    public function simpan()
    {
        $db = \Config\Database::connect();
        $builder = $db->table(‘pegawai’);
        $data = array(
                ‘nama’ => $this->request->getPost(‘nama’),
                ‘tanggal_lahir’  => $this->request->getPost(‘tanggal_lahir’),
                ‘pekerjaan’  => $this->request->getPost(‘pekerjaan’),
                ’email’ => $this->request->getPost(’email’),
                ‘alamat’  => $this->request->getPost(‘alamat’)
        );
        if($this->request->getPost(‘id’)==”){
            $builder->insert($data);
        }else{
            $builder->set($data);
            $builder->where(‘id_pegawai’,$this->request->getPost(‘id’));
            $builder->update();
        }
        return redirect()->to(”.base_url().’/public/pegawai’);
    }
    public function edit($id)
    {
        $db = \Config\Database::connect();
        $query = $db->query(“SELECT * from pegawai where id_pegawai=$id”);
        $hasil = $query->getFirstRow();
        echo json_encode($hasil);
    }
    public function hapus($id)
    {
        $db = \Config\Database::connect();
        $builder = $db->table(‘pegawai’);
        $builder->where(‘id_pegawai’,$id);
        $builder->delete();
    }
    public function export()
    {
        $object = new PHPExcel();
        $object->setActiveSheetIndex(0);
        $kolom= [‘ID’,’Nama’,’Tanggal Lahir’,’Pekerjaan’,’Email’,’Alamat’];
        $column = 0;
        foreach($kolom as $field)
        {
            $object->getActiveSheet()->setCellValueByColumnAndRow($column, 1, $field);
            $column++;
        }
        $db = \Config\Database::connect();
        $builder = $db->table(‘pegawai’);
        $query = $builder->get();
        $excel_row = 2;
        foreach ($query->getResult(‘array’) as $row){
            $hasil = array_values($row);
            $kolom = sizeof($row);
            for($i=0;$i<$kolom;$i++){
                $object->getActiveSheet()->setCellValueByColumnAndRow($i, $excel_row, $hasil[$i]);
            }
            $excel_row++;
        }
        $writer = PHPExcel_IOFactory::createWriter($object, ‘Excel2007’);
        header(‘Content-Type: application/vnd.ms-excel’);
        header(‘Content-Disposition: attachment;filename=”DataPegawai.xlsx”‘);
        $writer->save(‘php://output’);
    }
}

Oke sampai disini maka tutorial Codeigniter 4 Export PHPExcel selesai. Akhir kata semoga artikel yang cukup ringkas dan sederhana ini dapat membantu dan memberi manfaat kepada siapa saja yang membutuhkan, terimakasih telah berkunjung di Jogjatech.com, happy coding 🙂

LEAVE A REPLY

Please enter your comment!
Please enter your name here