Categories
Codeigniter

Cara Membuat Import Excel di Codeigniter

Pada tutorial sebelumnya kita telah membahas 2 Cara Ekspor data di codeigniter yaitu , Cara membuat Eksport Excel di codeigniter dan Cara Membuat Eksport PDF di Codeigniter di tutorial kali ini kita akan membuat Import Excel di Codeigniter, Import Excel sangat penting apalagi dalam Sebuah Sistem Perusahaan Atau sekolah, yang biasaya menyimpan data dalam excel. Import Excel juga dapat mempercepat dalam penambahan data. Bisa di bayangkan kalau kita mempunyai 1000 data yang akan di input secara manual, pasti akan lama, tapi apabila kita menggunakan Import excel ini mungkin hanya itungan menit.

Kita Masih menggunakan Library yang sama yaitu PHPExcel. Langsung saja Pada Codingannya membuat Import Excel di Codeigniter.

  1. Buat database dengan nama latihan dan import sql di bawah ini.
CREATE TABLE `siswa` (
  `nis` int(12) NOT NULL,
  `nama` varchar(30) NOT NULL,
  `jenis_kelamin` varchar(10) NOT NULL,
  `telp` varchar(12) NOT NULL,
  `alamat` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `siswa` (`nis`, `nama`, `jenis_kelamin`, `telp`, `alamat`) VALUES
(16171101, 'Asep', 'L', '0899999999', 'Jakarta'),
(16171102, 'Udin', 'L', '0888888888', 'Bandung'),
(16171103, 'Lisa', 'P', '07777777', 'Bali'),
(16171104, 'Raisha', 'P', '02322323', 'Kalimantan'),
(16171105, 'Sudirman', 'L', '08888', 'Surabaya');


ALTER TABLE `siswa`
  ADD PRIMARY KEY (`nis`);
COMMIT;

2. Buat Controller dengan nama Siswa.php

<?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 = [];

$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, [
'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)
}
}

3. Buat Model dengan nama SiswaModel.php

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

class SiswaModel 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);
}
}

4. Buat file baru beri nama Form.php

<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>

<script>
$(document).ready(function(){
// Sembunyikan alert validasi kosong
$("#kosong").hide();
});
</script>
</head>
<body>
<h3>Form Import</h3>
<hr>

<a href="<?php echo base_url("index.php/excel/format.xlsx"); ?>">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(empty($nis) && empty($nama) && empty($jenis_kelamin) && empty($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(empty($nis) or empty($nama) or empty($jenis_kelamin) or empty($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 1
// Jika lebih dari 1, berarti ada data yang masih kosong
if($kosong > 1){
?> 
<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>

5. Buat File baru dengan nama View.php

<html>
<head>
<title>IMPORT EXCEL CI 3</title>
</head>
<body>
<h1>Data Siswa</h1><hr>
<a href="<?php echo base_url("index.php/siswa/form"); ?>">Import Data</a><br><br>

<table border="1" cellpadding="8">
<tr>
<th>NIS</th>
<th>Nama</th>
<th>Jenis Kelamin</th>
<th>Alamat</th>
</tr>

<?php
if( ! empty($siswa)){ // Jika data pada database tidak sama dengan empty (alias ada datanya)
foreach($siswa as $data){ // Lakukan looping pada variabel siswa dari controller
echo "<tr>";
echo "<td>".$data->nis."</td>";
echo "<td>".$data->nama."</td>";
echo "<td>".$data->jenis_kelamin."</td>";
echo "<td>".$data->alamat."</td>";
echo "</tr>";
}
}else{ // Jika data tidak ada
echo "<tr><td colspan='4'>Data tidak ada</td></tr>";
}
?>
</table>
</body>
</html>

buat file excel seperti di atas dan coba import

Semoga tutorialnya berguna, jangan lupa comment dan share artikel membuat Import Excel di Codeigniter. Klik satu iklan untuk donasi website warungcode.com sampai bertemu di tutorial selanjutnya. Anda bisa download juga di sini

 

Leave a Reply

Your email address will not be published. Required fields are marked *