Import Excel menggunakan CodeIgniter

Import Excel menggunakan CodeIgniter

   Pada tutorial kali ini kita akan buat cara import data dari excel ke Mysql dengan menggunakan framework CodeIgniter dan menggunakan library PHPexcel yang berfungsi untuk membantu membaca isi file excel yang kita import nanti datanya dan database Mysql.

1. Persiapan

  1. Buat folder dengan nama import_excel_ci dan simpan pada folder xampp/htdocs/
  2. Buat folder dengan nama excel simpan pada folder xampp/htdocs/import_excel_ci/
  3. Buat folder dengan nama js, lalu simpan pada folder xampp/htdocs/import_excel_ci/.
  4. Download plugin PHPExcel, dengan klik link berikut : Download.
  5. Download Framework CodeIgniter dengan klik link berikut : download.
  6. Download Format Excel untuk proses import, bisa klik link berikut : Download.
  7. Download Librari jQuery, Klik link berikut : Download.
  8. Pindahkan codeigniter_v3.7z yang sudah di download tadi dan simpan kedalam folder xampp/htdocs/import_excel_ci/.
  9. Ekstrak file codeigniter_v3.7z
  10. Ekstrak file PHPExcel.7z yang telah di download tadi, dan copy kedalam folder PHPExcel nya ke folder xampp/htdocs/import_excel_ci/application/third_party/.
  11. Rename file format_ci.xlsx yang sudah didownload tadi menjadi format.xlsx, lalu copy file tersebut ke folder xampp/htdocs/import_excel_ci/excel/.
  12. Copy file jquery.min.js yang sudah di download kedalam folder xampp/htdocs/import_excel_ci/js/.

2. Membuat Database

   Buat Database dengan nama import excel dan buat table dengan nama siswa dengan struktur table seperti ini:

CREATE TABLE `siswa` (

  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,

  `nis` varchar(11) NOT NULL,

  `nama` varchar(50) NOT NULL,

  `jenis_kelamin` varchar(10) NOT NULL,

  `alamat` text NOT NULL

}

3. Konfigurasi CodeIgniter

  1. Buka folder xampp/htdocs/import_excel_ci/application/config/
  2. Buka file config.php
    Cari kode berikut $config['base_url'] = '';  dan ubah menjadi seperti ini:

$config['base_url'] = 'http://localhost/import_excel_ci/';

Kode diatas berfungsi untuk mereset base url nya.

  1. Buka file autoload.php
    Cari kode berikut:

$autoload['libraries'] = array();

$autoload['helper'] = array()

Dan Ubah menjadi seperti ini:

$autoload['libraries'] = array('database');

$autoload['helper'] = array('url');

 Kode diatas digunakan untuk meload class database dan url.

  1. Buka file routes.php
    Cari kode berikut ini:

$route['default_controller'] = 'welcome';

Dan ubah menjadi:

$route['default_controller'] = 'siswa';

Kode diatas untuk mereset contoller yangakan diload pertama kali

  1. Buka file database.php
    Cari kode berikut:

'hostname' => 'localhost',

'username' => '',

'password' => '',

'database' => '',

Dan ubah menjadi:

'hostname' => 'localhost', // Nama host

'username' => 'root', // Username

'password' => ' ', // Jika menggunakan password isi, jika tidak kosongkan saja

'database' => importexcel, // Nama databasenya

Kode diatas digunakan untuk koneksi ke database.

4. Membuat Model

Selanjutnya kita akan membuat model dengan nama Siswa_model. Dan masukan kode berikut:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Siswa_model extends CI_Model {

            public function view(){

                        return $this->db->get('siswa')->result(); // Tampilkan semua data yang ada di tabel siswa

            }

            // Fungsi untuk melakukan proses upload file

            public function upload_file($filename){

                        $this->load->library('upload'); // Load librari upload

                       

                        $config['upload_path'] = './excel/';

                        $config['allowed_types'] = 'xlsx';

                        $config['max_size']  = '2048';

                        $config['overwrite'] = true;

                        $config['file_name'] = $filename;

           

                        $this->upload->initialize($config); // Load konfigurasi uploadnya

                        if($this->upload->do_upload('file')){ // Lakukan upload dan Cek jika proses upload berhasil

                                    // Jika berhasil :

                                    $return = array('result' => 'success', 'file' => $this->upload->data(), 'error' => '');

                                    return $return;

                        }else{

                                    // Jika gagal :

                                    $return = array('result' => 'failed', 'file' => '', 'error' => $this->upload->display_errors());

                                    return $return;

                        }

            }

            // Buat sebuah fungsi untuk melakukan insert lebih dari 1 data

            public function insert_multiple($data){

                        $this->db->insert_batch('siswa', $data);

            }

}

Keterangan:

Pada kode diatas kita membuat fungsi view(), dimana didalamnya terdapat return $this->db->get(‘siswa’)->result(). Kode tersebut berfungsi menampilkan semua data pada table siswa.

Struktur data penulisannya seperti ini: return &thid->db->get(‘nama_table’)->result().  Pada kode ini juga da return yang digunakan untuk mengeluarkan hasil dari sebuah fungsi.

Dan terdapat Function upload_file($filename), berfungsi untuk mengupload file excel yang akan diimport datanya. Ada bebrapa konfigurasi dalam uploadnya:

  1. $config[‘upload_path’] = ‘./excel/’;
    Berfungsi untuk menentukan folder untuk menyimpan file yang akan diupload. Dalam catatan ini, kita akan menguploadnya di folder excel yang berada di root direktori web (xampp/htdocs/import_excel_ci/excel).
  2. $config[‘allowed_types’] = ‘xlsx’;
    Berfungsi untuk memvalidasi file tipe apa saja yang boleh diupload.
  3. $config[‘max_size’]    = ‘2048’;
    Berfungsi untuk menentukan maksimal ukuran file yang boleh diupload dalam satuan Kb. Disini ditentukan 2048 Kb = 2 MB.
  4. $config[‘overwrite’] = true;
    Berfungsi untuk mereplace file apabila di dalam folder (tempat menyimpan file uploadnya) sudah ada file dengan nama tersebut.
  5. $config[‘file_name’] = $filename;
    Berfungsi untuk menentukan dan merename file yang akan diupload sesuai keinginan. Kita set nama filenya menjadi import_data.xlsx

5. Membuat Contoller

Buat Controller dengan nama siswa.php dan masukan kode berikut:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Siswa extends CI_Controller {

            private $filename = "import_data"; // Kita tentukan nama filenya

            public function __construct(){

                        parent::__construct();

                        $this->load->model('SiswaModel');

            }

            public function index(){

                        $data['siswa'] = $this->SiswaModel->view();

                        $this->load->view('view', $data);

            }

            public function form(){

                        $data = array(); // Buat variabel $data sebagai array

                       

                        if(isset($_POST['preview'])){ // Jika user menekan tombol Preview pada form

                                    // lakukan upload file dengan memanggil function upload yang ada di SiswaModel.php

                                    $upload = $this->SiswaModel->upload_file($this->filename);

                                   

                                    if($upload['result'] == "success"){ // Jika proses upload sukses

                                                // Load plugin PHPExcel nya

                                                include APPPATH.'third_party/PHPExcel/PHPExcel.php';

                         

                                                $excelreader = new PHPExcel_Reader_Excel2007();

                                                $loadexcel = $excelreader->load('excel/'.$this->filename.'.xlsx'); // Load file yang tadi diupload ke folder excel

                                                $sheet = $loadexcel->getActiveSheet()->toArray(null, true, true ,true);

                                               

                                                // Masukan variabel $sheet ke dalam array data yang nantinya akan di kirim ke file form.php

                                                // Variabel $sheet tersebut berisi data-data yang sudah diinput di dalam excel yang sudha di upload sebelumnya

                                                $data['sheet'] = $sheet;

                                    }else{ // Jika proses upload gagal

                                                $data['upload_error'] = $upload['error']; // Ambil pesan error uploadnya untuk dikirim ke file form dan ditampilkan

                                    }

                        }

                        $this->load->view('form', $data);

            }

            public function import(){

                        // Load plugin PHPExcel nya

                        include APPPATH.'third_party/PHPExcel/PHPExcel.php';

                       

                        $excelreader = new PHPExcel_Reader_Excel2007();

                        $loadexcel = $excelreader->load('excel/'.$this->filename.'.xlsx'); // Load file yang telah diupload ke folder excel

                        $sheet = $loadexcel->getActiveSheet()->toArray(null, true, true ,true);

                        // Buat sebuah variabel array untuk menampung array data yg akan kita insert ke database

                        $data = array();

                        $numrow = 1;

                        foreach($sheet as $row){

                                    // Cek $numrow apakah lebih dari 1

                                    // Artinya karena baris pertama adalah nama-nama kolom

                                    // Jadi dilewat saja, tidak usah diimport

                                    if($numrow > 1){

                                                // Kita push (add) array data ke variabel data

                                                array_push($data, array(

                                                            'nis'=>$row['A'], // Insert data nis dari kolom A di excel

                                                            'nama'=>$row['B'], // Insert data nama dari kolom B di excel

                                                            'jenis_kelamin'=>$row['C'], // Insert data jenis kelamin dari kolom C di excel

                                                            'alamat'=>$row['D'], // Insert data alamat dari kolom D di excel

                                                ));

                                    }

                                    $numrow++; // Tambah 1 setiap kali looping

                        }

                        // Panggil fungsi insert_multiple yg telah kita buat sebelumnya di model

                        $this->SiswaModel->insert_multiple($data);

                        redirect("Siswa"); // Redirect ke halaman awal (ke controller siswa fungsi index)

            }

}

Keterangan:

$excelreader = new PHPexcel_Reader_Excel2007();

$loadexcel = $excelreader->load(‘excel/’.$this->filename.’.xlsx’);

$sheet = $loadexcel->getActiveSheet()->toArray(null,true,true,true);

Kode ini berfungsi membaca isi file excel yang telah diupload sebelumya. Hasilnya nanti akan menjadi array yang akan kita looping menggunakan foreach pada file Form.php.

Array_push(‘$data, [

     ‘nis’=>$row[‘A’],

     ‘nama’=>$row[‘B’],

     ‘jenis_kelamin’=>$row[‘C’],

     ‘alamat’=>$row[‘D’],

]);

Kode ini berfungsi menambahkan array baru ke dalam variable $data, dan nanti variable data akan terisi array seperti ini:

array(

  array('nis'=>'isi dari nis 1', 'nama'=>'isi dari nama 1', 'jenis_kelamin'=>'isi dari jenis kelamin 1', 'alamat'=>'isi dari alamat 1'),

  array('nis'=>'isi dari nis 2', 'nama'=>'isi dari nama 2', 'jenis_kelamin'=>'isi dari jenis kelamin 2', 'alamat'=>'isi dari alamat 2'),

  array('nis'=>'isi dari nis 3', 'nama'=>'isi dari nama 3', 'jenis_kelamin'=>'isi dari jenis kelamin 3', 'alamat'=>'isi dari alamat 3'),

)

6. Membuat View

Buat view dengan nama form dan masukan kode berikut:

<html>

<head>

            <title>Form Import</title>

            <!-- Load File jquery.min.js yang ada difolder js -->

            <script src="<?php echo base_url('js/jquery.min.js'); ?>"></script>

            <link type="text/css" href="<?php echo base_url()?>table/bootstrap/css/bootstrap.min.css" rel="stylesheet">

            <script>

            $(document).ready(function(){

                        // Sembunyikan alert validasi kosong

                        $("#kosong").hide();

            });

            </script>

</head>

<body>

            <h3 style="margin-left: 2%;">Form Import</h3>

            <a href="<?php echo base_url("excel/format.xlsx"); ?>" class="btn btn-primary" style="margin-left: 2%;">Download Format</a>

            <br>

            <br>

            <!-- Buat sebuah tag form dan arahkan action nya ke controller ini lagi -->

            <form method="post" action="<?php echo base_url("index.php/Siswa/form"); ?>" enctype="multipart/form-data">

                        <!--

                        -- Buat sebuah input type file

                        -- class pull-left berfungsi agar file input berada di sebelah kiri

                        -->

                        <input type="file" name="file">

                        <!--

                        -- Buat sebuah tombol submit untuk melakukan preview terlebih dahulu data yang akan di import

                        -->

                        <input type="submit" name="preview" value="Preview">

            </form>

            <?php

            if(isset($_POST['preview'])){ // Jika user menekan tombol Preview pada form

                        if(isset($upload_error)){ // Jika proses upload gagal

                                    echo "<div style='color: red;'>".$upload_error."</div>"; // Muncul pesan error upload

                                    die; // stop skrip

                        }

                        // Buat sebuah tag form untuk proses import data ke database

                        echo "<form method='post' action='".base_url("index.php/Siswa/import")."'>";

 

                        // Buat sebuah div untuk alert validasi kosong

                        echo "<div style='color: red;' id='kosong'>

                        Semua data belum diisi, Ada <span id='jumlah_kosong'></span> data yang belum diisi.

                        </div>";

                        echo "<table border='1' cellpadding='8'>

                        <tr>

                                    <th colspan='5'>Preview Data</th>

                        </tr>

                        <tr>

                                    <th>NIS</th>

                                    <th>Nama</th>

                                    <th>Jenis Kelamin</th>

                                    <th>Alamat</th>

                        </tr>";

                        $numrow = 1;

                        $kosong = 0;

                        // Lakukan perulangan dari data yang ada di excel

                        // $sheet adalah variabel yang dikirim dari controller

                        foreach($sheet as $row){

                                    // Ambil data pada excel sesuai Kolom

                                    $nis = $row['A']; // Ambil data NIS

                                    $nama = $row['B']; // Ambil data nama

                                    $jenis_kelamin = $row['C']; // Ambil data jenis kelamin

                                    $alamat = $row['D']; // Ambil data alamat

 

                                    // Cek jika semua data tidak diisi

                                    if($nis == "" && $nama == "" && $jenis_kelamin == "" && $alamat == "")

                                                continue; // Lewat data pada baris ini (masuk ke looping selanjutnya / baris selanjutnya)

 

                                    // Cek $numrow apakah lebih dari 1

                                    // Artinya karena baris pertama adalah nama-nama kolom

                                    // Jadi dilewat saja, tidak usah diimport

                                    if($numrow > 1){

                                                // Validasi apakah semua data telah diisi

                                                $nis_td = ( ! empty($nis))? "" : " style='background: #E07171;'"; // Jika NIS kosong, beri warna merah

                                                $nama_td = ( ! empty($nama))? "" : " style='background: #E07171;'"; // Jika Nama kosong, beri warna merah

                                                $jk_td = ( ! empty($jenis_kelamin))? "" : " style='background: #E07171;'"; // Jika Jenis Kelamin kosong, beri warna merah

                                                $alamat_td = ( ! empty($alamat))? "" : " style='background: #E07171;'"; // Jika Alamat kosong, beri warna merah

 

                                                // Jika salah satu data ada yang kosong

                                                if($nis == "" or $nama == "" or $jenis_kelamin == "" or $alamat == ""){

                                                            $kosong++; // Tambah 1 variabel $kosong

                                                }

                                                echo "<tr>";

                                                echo "<td".$nis_td.">".$nis."</td>";

                                                echo "<td".$nama_td.">".$nama."</td>";

                                                echo "<td".$jk_td.">".$jenis_kelamin."</td>";

                                                echo "<td".$alamat_td.">".$alamat."</td>";

                                                echo "</tr>";

                                    }

                                    $numrow++; // Tambah 1 setiap kali looping

                        }

                        echo "</table>";

 

                        // Cek apakah variabel kosong lebih dari 0

                        // Jika lebih dari 0, berarti ada data yang masih kosong

                        if($kosong > 0){

                        ?>

                                    <script>

                                    $(document).ready(function(){

                                                // Ubah isi dari tag span dengan id jumlah_kosong dengan isi dari variabel kosong

                                                $("#jumlah_kosong").html('<?php echo $kosong; ?>');

                                                $("#kosong").show(); // Munculkan alert validasi kosong

                                    });

                                    </script>

                        <?php

                        }else{ // Jika semua data sudah diisi

                                    echo "<hr>";

                                    // Buat sebuah tombol untuk mengimport data ke database

                                    echo "<button type='submit' name='import'>Import</button>";

                                    echo "<a href='".base_url("index.php/Siswa")."'>Cancel</a>";

                        }

                        echo "</form>";

            }

            ?>

</body>

</html>

Dan tampilan depannya akan seperti ini:

Jika kalian ingin meng-import file excel klik button import data dan akan muncul seperti ini:

Dan Choose file lalu preview dan data yang ada didalam file excel tadi akan keluar seperti ini:

Download Tutorial