Cara Import Data Excel ke Database MySql Dengan Codeigniter

read
Cara Import Data Excel ke Database MySql Dengan Codeigniter

Pada postingan kali ini, saya akan membahas bagaimana cara Import data dari file excel ke dalam database menggunakan framework Codeigniter.

Untuk dapat dengan mudah melakukan proses import, kita kali ini akan menggunakan library PHPExcel yang dapat kamu download disini.

Mengimport data dari excel artinya kita harus membaca satu persatu sheet excel kemudian setelah itu kita simpan kedalam sebuah array dan terakhir array tersebut kita eksekusi untuk di insert ke Database dengan operasi batch yang artinya dalam satu eksekusi query kita memasukan banyak data sekaligus.

Di Framework Codeigniter kita dapat dengan mudah melakukan insert batch karena sudah ada query builder insert_batch() yang dapat membantu kita.

Selain Library PHPExcel masih ada banyak library lainnya yang dapat kita gunakan, namun saya lebih memilih menggunaakn PHPExcel karena penggunaannya yang mudah dan juga Library ini mendukung file Excel dengan format .xlsx maupun .xls. Akan tetapi untuk format .csv Library ini belum sepenuhnya mendukung.

Sebelum memulai tutorialnya ada beberapa persiapan yang harus kita lakukan, yaitu :

  1. Download Framework Codeigniter (jika belum punya)
  2. Download Library PHPExcel disini
  3. Bootstrap (untuk UI)
  4. Xampp atau sejenisnya
  5. Contoh File Excel (Download file.xls | file.xlsx)

Setelah semua sudah siap mari kita mulai dengan step-step dibawah ini :

Cara Import Data Excel ke Database MySql Dengan Codeigniter

Pertama, saya akan menggunakan contoh data sederhana dalam tutorial ini untuk nantinya di import ke database. Database yang saya gunakan adalah database MySql. Jika kamu menggunakan database yang berbeda bisa disesuaikan dahulu. Jika tidak maka ikuti langkah dibawah ini.

Pertama, Siapkan dahulu database yang nantinya digunakan untuk menyimpan data dari Excel.

1. Buat Database dan buat Table :

Untuk nama database kalian sesuaikan daja dengan projek kalian, tapi untuk tabel berikut adalah struktur yang saya gunakan.

CREATE TABLE `tbl_data2` (
  `id_data` int(11) NOT NULL,
  `nama` varchar(50) NOT NULL,
  `jurusan` varchar(50) NOT NULL,
  `angkatan` varchar(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Indexes for table `tbl_data2`
--
ALTER TABLE `tbl_data2`
  ADD PRIMARY KEY (`id_data`);

--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `tbl_data2`
--
ALTER TABLE `tbl_data2`
  MODIFY `id_data` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
COMMIT;

Jika kamu sudah memilik file projek dengan Codeigniter maka kita tinggal menginstall library PHPExcel ini ke dalam folder projek kita.

2. Install PHPExcel ke folder projek 

Taruh File PHPExcel.zip yang telah kamu download dari Github ke folder libraries yang ada di Application > libraries. kemudian Extract file tersebut disana.

kemudian buka dan cari folder Classes dan ambil file PHPExcel.php dan Folder PHPExcel untuk ditaruh di folder Application > libraries.

Jika bingun, lihat contoh gambar dibawah ini :

Struktur folder

Seteleh itu buat file baru juga disana dengan nama Excel.php, kemudian isikan kode dibawah ini :

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

class Excel extends PHPExcel{

	public function __construct()
	{
		parent::__construct();
	}
}

?>

Kode diatas digunakan untuk menghubungkan Library PHPExcel ke projek Codeigniter kita, atau dalam bahasa lain kita mendaftarkan Library PHPExcel sebagai library yang dapat digunakan di Codeigniter.

3. Buat Model

Setelah itu buat Model baru di Folder Application > model dengan nama ImportModel.php, kemudian isikan baris kode dibawah ini :

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

class ImportModel extends CI_Model {

	public function insert($data){
		$insert = $this->db->insert_batch('tbl_data2', $data);
		if($insert){
			return true;
		}
	}
	public function getData(){
		$this->db->select('*');
		return $this->db->get('tbl_data2')->result_array();
	}

}

Penjelasan kode diatas :

  1. untuk function insert() nantinya kita gunakan untuk melakukan proses insert ke tabel tbl_data2 dengan data yang diperoleh dari parameter $data fungsi tersebut
  2. untuk function getData() kita gunakan untuk mengambil data di database dan nantinya akan ditampilkan di view

4. Buat Controller

Setelah membuat model, selanjutnya kita buat Controller baru di folder Application > Controller dengan nama ImportController.php dan isikan kode beriku ini :

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

class ImportController extends CI_Controller {

	public function __construct(){
		parent::__construct();
		$this->load->library(array('excel','session'));
	}

	public function index()
	{
		$this->load->model('ImportModel');
		$data = array(
			'list_data'	=> $this->ImportModel->getData()
		);
		$this->load->view('import_excel.php',$data);
	}

	public function import_excel(){
		if (isset($_FILES["fileExcel"]["name"])) {
			$path = $_FILES["fileExcel"]["tmp_name"];
			$object = PHPExcel_IOFactory::load($path);
			foreach($object->getWorksheetIterator() as $worksheet)
			{
				$highestRow = $worksheet->getHighestRow();
				$highestColumn = $worksheet->getHighestColumn();	
				for($row=2; $row<=$highestRow; $row++)
				{
					$nama = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
					$jurusan = $worksheet->getCellByColumnAndRow(2, $row)->getValue();
					$angkatan = $worksheet->getCellByColumnAndRow(3, $row)->getValue();
					$temp_data[] = array(
						'nama'	=> $nama,
						'jurusan'	=> $jurusan,
						'angkatan'	=> $angkatan
					); 	
				}
			}
			$this->load->model('ImportModel');
			$insert = $this->ImportModel->insert($temp_data);
			if($insert){
				$this->session->set_flashdata('status', '<span class="glyphicon glyphicon-ok"></span> Data Berhasil di Import ke Database');
				redirect($_SERVER['HTTP_REFERER']);
			}else{
				$this->session->set_flashdata('status', '<span class="glyphicon glyphicon-remove"></span> Terjadi Kesalahan');
				redirect($_SERVER['HTTP_REFERER']);
			}
		}else{
			echo "Tidak ada file yang masuk";
		}
	}

}

Penjelsan kode diatas :

pada function import_excel() di bagian looping for seperti dibawah ini:

for($row=2; $row<=$highestRow; $row++)
{
	$nama = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
	$jurusan = $worksheet->getCellByColumnAndRow(2, $row)->getValue();
	$angkatan = $worksheet->getCellByColumnAndRow(3, $row)->getValue();
	$temp_data[] = array(
		'nama'	=> $nama,
		'jurusan'	=> $jurusan,
		'angkatan'	=> $angkatan
	); 	
}

Penjelasan Kode diatas

Pada baris for terdapat variable $row=2, nilai 2 ini didapat dari baris pertama dalam data file excel yang kita gunakan, seperti gambar dibawah ini :

urutan kedua pada data excel

Jadi kita memulai pengambilan data dari baris nomor 2, karena pada baris pertama terdapat Title/Header setiap kolom data tersebut.

Untuk kode $nama = $worksheet->getCellByColumnAndRow(1, $row)->getValue();, nilai 1 yang ada didalmnya diambil dari urutan data yang kita mau ambil dimulai angka 0 dari kiri. pada tutorial ini karena pada file excel value nama berada di kolom ke 2 maka kita gunakan angka 1 untuk mengambil data nama.

untuk lebih jelasnya lihat gambar dibawah ini :

Petunjuk urutan data excel

untuk variable $temp_data[] kita gunakan untuk menyimpan data yang telah dimabil dari excel kedalam bentuk array yang nantinya akan di input ke tabel database

dan yang terakhir, baris kode ini $insert = $this->ImportModel->insert($temp_data); digunakan untuk melakukan insert ke database, kode tersebut adalah fungsi yang telah kita buat sebelumnya di ImportModel.php

5. Membuat View

Setelah membuat model dan controller, selanjutnya kita membuat view yang bertugas sebagai form upload dan menampilkan data dari database.

Buat view dengan nama import_excel.php kemudian taruh di application > view dan isikan baris kode dibawah ini :

<!DOCTYPE html>
<html>
<head>
	<title>Search Data</title>
</head>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<body>

<div class="container">
	<div class="row" style="margin-top: 30px;">
		<div class="col-md-4 col-md-offset-3">
			<h3>Import Data</h3>
			<?php if(!empty($this->session->flashdata('status'))){ ?>
			<div class="alert alert-info" role="alert"><?= $this->session->flashdata('status'); ?></div>
			<?php } ?>
			<form action="<?= base_url('ImportController/import_excel'); ?>" method="post" enctype="multipart/form-data">
				<div class="form-group">
					<label>Pilih File Excel</label>
					<input type="file" name="fileExcel">
				</div>
				<div>
					<button class='btn btn-success' type="submit">
						<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
			    		Import		
					</button>
				</div>
			</form>
		</div>
		<div class="col-md-6 col-md-offset-3" style="margin-top: 50px;">
			<h3>Daftar Data</h3>
			<div class="table-responsive">
				<table class="table table-striped table-bordered">
					<thead>
						<tr>
							<th>No</th>
							<th>Nama</th>
							<th>Jurusan</th>
							<th>Angkatan</th>
						</tr>
					</thead>
					<tbody>
						<?php 
							$no = 1;
							foreach ($list_data as $row) {
						 ?>
						<tr>
							<td><?= $no++; ?></td>
							<td><?= $row['nama'] ?></td>
							<td><?= $row['jurusan'] ?></td>
							<td><?= $row['angkatan'] ?></td>
						</tr>
						<?php } ?>
					</tbody>
				</table>	
			</div>
		</div>
	</div>
</div>
</body>
</html>

Jika sudah semua kode dibuat, maka langkah terakhir adalah tes jalankan hasilnya.

hasil dari kode import data excel ke database

Jika berhasil maka file excel yang diupload akan berhasil tersimpan ke database dan akan muncul di tabel.

Selamat anda sudah berhasil membuat import data dari excel ke database mysql menggunakan Framework Codeigniter.

Info penting!

Bila dalam proes input terjasi error seperti ini :

Severity: Warning

Message: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

Filename: Shared/OLE.php

Line Number: 288

Maka kamu dapat merubah sedikit kode di library PHPExcel di bagian PHPExcel > Shared > file OLE.php pada baris 288. Rubah kode continue; menjadi break;

Sekian tutorial kali ini, semoga dapat membantu:)

Bila ada pertanyaan silahkan tanyakan langsung pada kolom komentar dibawah ini

 

Referensi :

  1. https://github.com/PHPOffice/PHPExcel
  2. https://www.webslesson.info/2018/04/how-to-import-excel-data-into-mysql-database-using-codeigniter.html
Desu
Desu Seorang Web Developer yang senang dengan dunia blogging dan SEO Analysis. Sering mengabiskan waktu untuk mencangkul di internet.