Import Data Excel Dengan Codeigniter 4

Pada tutorial kali ini kita akan membahas bagaimana cara import data dari file excel ke database menggunakan codeigniter 4.Oke langsung saja ,kita menggunakan library bernama PHPExcel untuk membaca file excel.

Pertama download codeigniter4 dari situs resminya.Jika belum tau cara download atau memasangnya bisa dilihat disini

Download PHPExcel

Untuk library PHPExcel bisa didownload di link ini PHP EXCEL

Langkah selanjutnya pindahkan file PHPExcel yang sudah diextract ke project codeigniter 4 kita ke folder app/ThirdParty.Sehingga struktur terlihat seperti gambar dibawah ini.

Struktur dan Setting Database

Kemudian buat database baru bernama latihanci4.Lalu kita akan buat tabel bernama contacts dengan struktur seperti dibawah.

Kemudian konfigurasi file .env dibagian database.Sesuaikan dengan settingan database teman-teman.

database.default.hostname = localhost
database.default.database = latihanci4
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi
Setting AutoLoad ThirdParty

Langkah selanjutnya kita mengubah file di folder app/Config/Autoload.php agar plugin PHPExcel dapat digunakan di semua controller.Ubah file tadi menjadi seperti dibawah ini.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?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);
	}

	//--------------------------------------------------------------------
}

Bagian yang dirubah di array $classmap di baris 74,kita tambahkan lokasi plugin kita yang difolder ThirdParty.

Membuat Model

Buat file baru bernama ContactModel.php di folder app/Models/ContactModel.php dan tulis kode dibawah.

<?php namespace App\Models;
use CodeIgniter\Model;
class ContactModel extends Model
{
	protected $table = 'contacts';
	protected $primaryKey = 'id';
	protected $allowedFields =['nama','handphone','email'];
}

Membuat Controller

Kita akan menggunakan controller bawaan Home yang berada di folder app/Controllers/Home.php.

Akan dibuat 2 fungsi ,pertama index untuk menampilkan view dengan data contact dan prosesExcel untuk membaca excel dan menyimpan ke tabel.

Untuk memanggil fungsi thirdParty agar bisa digunakan menggunakan perintah seperti dibawah ini.

1
2
3
<?php namespace App\Controllers;
use PHPExcel;
use PHPExcel_IOFactory;

Karena sudah dibuat di autoload kita tinggal memanggilnya menggunakan perintah use.

Untuk kode full untuk controller Home bisa dilihat dibawah ini.

<?php namespace App\Controllers;
use PHPExcel;
use PHPExcel_IOFactory;
use App\Models\ContactModel;
class Home extends BaseController
{
	public function __construct(){
		$this->contact = new ContactModel();
	}
	public function index(){
		$data['contacts'] = $this->contact->findAll();
		echo view('index',$data);
	}
	public function prosesExcel()
	{
		$file = $this->request->getFile('fileexcel');
		if($file){
			$excelReader  = new PHPExcel();
			//mengambil lokasi temp file
			$fileLocation = $file->getTempName();
			//baca file
			$objPHPExcel = PHPExcel_IOFactory::load($fileLocation);
			//ambil sheet active
			$sheet	= $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
			//looping untuk mengambil data
			foreach ($sheet as $idx => $data) {
				//skip index 1 karena title excel
				if($idx==1){
					continue;
				}
				$nama = $data['A'];
				$hp = $data['B'];
				$email = $data['C'];
				// insert data
				$this->contact->insert([
					'nama'=>$nama,
					'handphone'=>$hp,
					'email'=>$email
				]);
			}
		}
		session()->setFlashdata('message','Berhasil import excel');
		return redirect()->to('/home');
	}
	
}

Untuk fungsi prosesExcel kita tidak perlu menyimpan file excel yang telah diupload terlebih dahulu.Kita akan gunakan data excel yang berada di folder tmp yang hanya bersifat sementara.

Membuat View

Buat file index.php di folder app/Views kemudian ketikkan kode dibawah.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Import Excel Codeigniter</title>
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
	<div class="container mt-3">
		<?php
		if(session()->getFlashdata('message')){
		?>
			<div class="alert alert-info">
				<?= session()->getFlashdata('message') ?>
			</div>
		<?php
		}
		?>
		<form method="post" action="/home/prosesExcel" enctype="multipart/form-data">
			<div class="form-group">
				<label>File Excel</label>
				<input type="file" name="fileexcel" class="form-control" id="file" required accept=".xls, .xlsx" /></p>
			</div>
			<div class="form-group">
				<button class="btn btn-primary" type="submit">Upload</button>
			</div>
		</form>
		<table class="table table-bordered">
			<thead>
				<tr>
					<th>Nama</th>
					<th>Handphone</th>
					<th>Email</th>
				</tr>
			</thead>
			<tbody id="contactTable">
			<?php
			if(!empty($contacts)){
				foreach($contacts as $contact){
				?>
					<tr>
						<td><?= $contact['nama'] ?></td>
						<td><?= $contact['handphone'] ?></td>
						<td><?= $contact['email'] ?></td>
					</tr>
				<?php
				}
			}else{
			?>
				<tr>
					<td colspan="3">Tidak ada data</td>		
				</tr>
			<?php
			}
			?>
			</tbody>
		</table>
	</div>
</body>
</html>

Kita menggunakan bootstrap 4 yang online untuk membuat tampilan.Form action diarahkan ke controller Home fungsi prosesExcel.

Ketika membuat form upload file jangan lupa untuk menambahkan attribut berikut enctype="multipart/form-data”.

Untuk format excel yang diupload seperti dibawah ini.

Kemudian coba jalankan dengan masuk ke direktori project melalui CMD/Terminal dan ketik php spark serve.Jika tidak ada kesalahan maka akan tampil seperti gambar ini.

Kemudian coba upload file,jika berhasil maka data akan masuk dan tampil pesan seperti gambar dibawah ini.

Untuk kelanjutan tutorial ini akan dibuat Import Data Excel Menggunakan Ajax di Codeigniter 4.Sekian tutorial kali ini,jika mengalami kesulitan silahkan bertanya dibawah.