Import Dari Excel Ke Database Menggunakan CodeIgniter

Selamat datang lagi pada blog saya kali ini. Pada artikel kali ini saya akan menjelaskan bagaimana cara Import dari Excel ke Database Menggunakan CodeIgniter ? sebelumnya saya mempunyai struktur data pada database sebagai berikut :
terdapat 9 data yang akan di proses kedalam database. dikarenakan id_siswa adalah Key jadi pada database tidak kita proses.
Sebelumnya buat sebuah file Excel 
untuk mempermudah sesuaikan urutan pada database dengan excel. karena id_siswa adalah bersifat AUTO INCREMENT jadi pada excel tidak kita tampilkan.
pada kali ini saya menggunakan lib excel_reader dapat di download disini : DOWNLOAD
simpan Lib tersebut pada folder application\libraries
Buat sebuah function pada controller terserah mau anda kasih nama apa, di sini saya memberikan nama excel. Function ini berfungsi untuk load views uploadnya saja
$this->load->view('siswa/excel');
pada tampilan view excel buat sebuah file untuk uploadnya
<?php echo form_open_multipart('siswa/do_upload');?>
<input type="file" id="file_upload" name="userfile" size="20" />
<br />
<input type="submit" value="Upload" />
<?php echo form_close();?>
siswa/do_upload <<== berikan berdasarkan Controller uploadnya.
untuk proses uploadnya buat sebuah function pada controller terserah anda mau kasih nama apa, disni saya memberikan nama do_upload function ini yang akan di tuju saat proses upload di atas , nama function harus sama :D
pada function do_upload tadi akan saya jelas step demi step sintax yang akan kita gunakan.
pertam kita harus membuat temp untuk uploadnya, terserah mau anda kasih nama folder apa untuk temp ini , di sini saya akan memberikan nama temp_upload. untuk hal tersebut buat sebuah sintax nya seperti berikut, untuk memperkenalkan tempat temp upload tadi.
$config['upload_path'] = './temp_upload/';
jika sudah kita harus memperkenalkan extensi file yang di izinkan untuk di proses, untuk itu kita membuatkan sintax berikut untuk memperkenalkan/meizinkan extensi file
$config['allowed_types'] = 'xls';
untuk configurasi ini sudah selesai, saatnya kita akan melakukan load library upload dan kita sinkronkan dengan config di atas sehingga menjadi seperti ini.
$this->load->library('upload', $config);
kita harus filter atau memberikan sebuah logic jika suatu saat terjadi error saat upload file.
jika kebenarannya kita akan menampilkan display_errornya
oleh karena itu jika exekusi $this->upload->do_upload() tidak benar makan tampilkan pesan kesalahannya, untuk codingnya dapat dilihat di bawah ini :
if ( ! $this->upload->do_upload())
{
$data = array('error' => $this->upload->display_errors());
}
untuk nilai tidak benar alias jika salah maka kita membuatkan logic barunya :
else
{
            $data = array('error' => false);
$upload_data = $this->upload->data(); 
pada logic ini exekusi programnya akan di lakukan, terlebih dahulu kita harus load library excel_reader tadi
$this->load->library('excel_reader'); 
untuk mengenal apa itu excel_reader dapat dilihat disini :
https://code.google.com/p/php-excel-reader/wiki/Documentation
 untuk coding selanjutnya adalah upload_data kita menggunakan full_path
$file =  $upload_data['full_path'];
jika sudah kita akan membaca file excel yang sudah kita upload tadi
$this->excel_reader->read($file);
 kalau file excel sudah terbaca oleh excel_reader maka kita akan set nilai2 yang ada pada excel tadi dimulai dari sheets yang berapa atau kita ambil sheets berapa.
$data = $this->excel_reader->sheets[0] ;
jika sampai disini sudah oke kita akan memasukan nilai data yang ada didalam excel tadi kedalam array
                        $dataexcel = Array();
karena tadi data ada 10 jadikita harus membuat sebuah looping
for ($i = 1; $i <= $data['numRows']; $i++) {
                            if($data['cells'][$i][1] == '') break;
                            $dataexcel[$i-1]['nis'] = $data['cells'][$i][1];
                            $dataexcel[$i-1]['nama'] = $data['cells'][$i][2];
                            $dataexcel[$i-1]['alamat'] = $data['cells'][$i][3];
                            $dataexcel[$i-1]['kelas'] = $data['cells'][$i][4];
                            $dataexcel[$i-1]['wali'] = $data['cells'][$i][5];
                            $dataexcel[$i-1]['alamat_wali'] = $data['cells'][$i][6];
                            $dataexcel[$i-1]['telp_wali'] = $data['cells'][$i][7];
                            $dataexcel[$i-1]['pekerjaan'] = $data['cells'][$i][8];
}
jika semua looping sudah tersimpan didalam arrya maka data excel yang sudah diupload tadi akan kita hapus menggunakan perintah berikut
            delete_files($upload_data['file_path']);
 sampai disini proses pengambilan data dari excel sudah selesai, sisa kita memasukannya kedalam database, disini saya membuat sebuah module nya dengan nama Excel_model
buat sebuah function didalam module tersebut
 function tambahsiswa($dataarray)
    {
        for($i=0;$i<count($dataarray);$i++){
            $data = array(
                'nis'=>$dataarray[$i]['nis'],
                'nama'=>$dataarray[$i]['nama'],
                'alamat'=>$dataarray[$i]['alamat'],
                'kelas'=>$dataarray[$i]['kelas'],
                'wali'=>$dataarray[$i]['wali'],
                'alamat_wali'=>$dataarray[$i]['alamat_wali'],
                'telp_wali'=>$dataarray[$i]['telp_wali'],
                'pekerjaan'=>$dataarray[$i]['pekerjaan']
            );
            $this->db->insert('siswa', $data);
        }
    }
function ini yang akan melakukan proses penyimpanan kedalam database, yang mana data akan kita lakukan normalisasi data sehingga dapat sinkron dengan database supaya tidak terjadi kesalahan saat insert data ke dalam database.
jika sudah buat modul kita akan kembali ke controller tadi
pada baris setelah coding diatas kita akan melakukan proses inputan menggunakan modul di atas. karena dari tadi kita tidak ada melakukan load modul makan kita harus load terlebih dahulu modulnya.
 $this->load->model('Excel_model');
            $this->Excel_model->tambahsiswa($dataexcel);
Jika sudah kita akan menutup exekusi logic kesalahan tersebut lalu melakukan rendirect halaman
header('location:'.base_url().'siswa');
Untuk coding lengkap untuk controller adalah :
public function excel()
{
if($this->session->userdata('logged_in')!="" && $this->session->userdata('stts')=="administrator")
{
$this->load->view('templat/header');
$this->load->view('siswa/excel');
$this->load->view('templat/footer');
}
else
{
header('location:'.base_url().'');
}
}
public function do_upload()
{
if($this->session->userdata('logged_in')!="" && $this->session->userdata('stts')=="administrator")
{
$config['upload_path'] = './temp_upload/';
$config['allowed_types'] = 'xls';
             
$this->load->library('upload', $config);
             
if ( ! $this->upload->do_upload())
{
$data = array('error' => $this->upload->display_errors());
}
else
{
            $data = array('error' => false);
$upload_data = $this->upload->data();
            $this->load->library('excel_reader');
$this->excel_reader->setOutputEncoding('230787');
$file =  $upload_data['full_path'];
$this->excel_reader->read($file);
error_reporting(E_ALL ^ E_NOTICE);
// Sheet 1
$data = $this->excel_reader->sheets[0] ;
                        $dataexcel = Array();
for ($i = 1; $i <= $data['numRows']; $i++) {
                            if($data['cells'][$i][1] == '') break;
                            $dataexcel[$i-1]['nis'] = $data['cells'][$i][1];
                            $dataexcel[$i-1]['nama'] = $data['cells'][$i][2];
                            $dataexcel[$i-1]['alamat'] = $data['cells'][$i][3];
                            $dataexcel[$i-1]['kelas'] = $data['cells'][$i][4];
                            $dataexcel[$i-1]['wali'] = $data['cells'][$i][5];
                            $dataexcel[$i-1]['alamat_wali'] = $data['cells'][$i][6];
                            $dataexcel[$i-1]['telp_wali'] = $data['cells'][$i][7];
                            $dataexcel[$i-1]['pekerjaan'] = $data['cells'][$i][8];

}        
            delete_files($upload_data['file_path']);
            $this->load->model('Excel_model');
            $this->Excel_model->tambahsiswa($dataexcel);
}
header('location:'.base_url().'siswa');
}
else
{
header('location:'.base_url().'');
}
}
Dan untuk modul nya adalah :
<?php
class Excel_model extends CI_Model {
    function tambahsiswa($dataarray)
    {
        for($i=0;$i<count($dataarray);$i++){
            $data = array(
                'nis'=>$dataarray[$i]['nis'],
                'nama'=>$dataarray[$i]['nama'],
                'alamat'=>$dataarray[$i]['alamat'],
                'kelas'=>$dataarray[$i]['kelas'],
                'wali'=>$dataarray[$i]['wali'],
                'alamat_wali'=>$dataarray[$i]['alamat_wali'],
                'telp_wali'=>$dataarray[$i]['telp_wali'],
                'pekerjaan'=>$dataarray[$i]['pekerjaan']
            );
            $this->db->insert('siswa', $data);
        }
    }
}
?>
 Tampilan Viewnya adalah ;

  <body>
<div class="well"><?php echo form_open_multipart('siswa/do_upload');?>
<input type="file" id="file_upload" name="userfile" size="20" />
<br />
<input type="submit" value="Upload" />
<?php echo form_close();?>
Berikut Print Screen









Semoga artikel ini dapat membantu anda dalam dalam proses import dari excel ke database menggunakan Codeigniter

UPDATE :
30-Juni-2014
Solusi Fatal error: Call to undefined function delete_files() 

13 Komentar

Berikan Komentar yang bermanfaat dan sehat.

  1. mas ini hanya bisa import dari file excel yg fomatnya xls ya? tidak bisa yg format xlsx ? itu gimana ya kira2 kalo yg xlsx?
    terimakasih

    BalasHapus
    Balasan
    1. struktur pada xlsx agak berbeda mas, ya ini hanya bisa untuk xls saja

      Hapus
  2. mas, bagaimana membuat mysql tidak membaca formula cell tapi hasil perkalian antar cell.

    saya sdh upload dan data cell yang tidak mengandung formula sukses tapi yang mengandung formula tidak bisa.

    BalasHapus
  3. mas, mau tanya, udah aku ketik semua script nya, kog page not found ya ?

    BalasHapus
  4. aku coba langsung eksekusi fungsi excel kog error ya mas
    "Fatal error: Call to a member function userdata() on a non-object in C:\xampp\htdocs\excel\application\controllers\siswa.php on line 4"

    BalasHapus
  5. Mas harry hank, saya udah coba lancar ga ada erornya , nah masalah itu data excellnya gamau masuk ke database, itu gimana ya? Hehehe terimakasih sebelumnyaa

    BalasHapus
    Balasan
    1. Sudah diatur belum databasenya...
      http://media-kreatif.com/home/post/27/konfigurasi-dasar-pada-codeigniter-framework.prm

      Hapus
  6. Message: iconv(): Wrong charset, conversion from `UTF-16LE' to `230787' is not allowed

    gimana nih mas

    BalasHapus
    Balasan
    1. coba tes "iconv('UTF-16LE', 'utf-8', 'test');" work atau ngk

      Hapus
  7. source lengkapnya gak ada mas?

    BalasHapus
  8. mas nama tabel, nama file di controller, file di modul dan file di viewnya apa y ?

    BalasHapus
  9. Message: iconv(): Wrong charset, conversion from `UTF-16LE' to `230787' is not allowed
    sudah dicoba menggunakan "iconv('UTF-16LE', 'utf-8', 'test');" tetapi data tidak terinput pada database

    BalasHapus
Posting Komentar
Lebih baru Lebih lama