Ketemu lagi dengan saya. Pada kesempatan kali ini, saya akan coba share catatan saya mengenai export data dari database ke excel. Hampir di setiap web aplikasi di perlukan yang namanya fitur Report / Laporan. Biasanya laporan tersebut menggunakan PDF atau Excel. Nah untuk catatan kali ini, kita akan buat laporan excel (export data ke excel). Dalam catatan ini, kita menggunakan sebuah plugin yang sudah lama dan banyak digunakan yakni PHPExcel. Menurut saya, plugin ini benar-benar plugin yang sangat lengkap dan dokumentasi nya pun lengkap dan mudah di pahami (untuk dokumentasi saya cantumkan link nya pada akhir catatan ini). Oke sekarang kita langsung masuk ke langkah demi langkah untuk membuat hal tersebut. Oh iyaa disini kita juga pakai Framework Codeigniter 3 (versi 3). PENTING, MOHON DIBACA TERLEBIH DAHULU Tutorial Import Data dari Excel untuk PHP 7.2.8 ke Atas : Berikut ini untuk link download Xampp Versi 7.2.8 :
DEMO STEP 1 – INSTALASI
STEP 2 – BUAT DATABASE CREATE TABLE `siswa` ( `nis` varchar(11) NOT NULL PRIMARY KEY, `nama` varchar(50) NOT NULL, `jenis_kelamin` varchar(10) NOT NULL, `alamat` text NOT NULL ) STEP 3 –
KONFIGURASI
STEP 4 – BUAT MODEL <?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 } } Pada kode diatas, kita membuat sebuah fungsi view(). dimana didalamnya terdapat kode return $this->db->get(‘siswa’)->result(). Kode tersebut berfungsi untuk menampilkan semua data pada tabel siswa. Struktur dasar penulisannya seperti ini : return $this->db->get(‘nama_tabel‘)->result(). Lalu pada kode diatas juga ada kode
return, kode tersebut digunakan untuk mengeluarkan hasil dari sebuah fungsi. Pada kasus diatas, hasil yang dikeluarkan oleh return yaitu data-data siswa. STEP 5 – BUAT CONTROLLER <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Siswa extends CI_Controller { public function __construct(){ parent::__construct(); $this->load->model('SiswaModel'); } public function index(){ $data['siswa'] = $this->SiswaModel->view(); $this->load->view('view', $data); } public function export(){ // Load plugin PHPExcel nya include APPPATH.'third_party/PHPExcel/PHPExcel.php'; // Panggil class PHPExcel nya $excel = new PHPExcel(); // Settingan awal fil excel $excel->getProperties()->setCreator('My Notes Code') ->setLastModifiedBy('My Notes Code') ->setTitle("Data Siswa") ->setSubject("Siswa") ->setDescription("Laporan Semua Data Siswa") ->setKeywords("Data Siswa"); // Buat sebuah variabel untuk menampung pengaturan style dari header tabel $style_col = array( 'font' => array('bold' => true), // Set font nya jadi bold 'alignment' => array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, // Set text jadi ditengah secara horizontal (center) 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text jadi di tengah secara vertical (middle) ), 'borders' => array( 'top' => array('style' => PHPExcel_Style_Border::BORDER_THIN), // Set border top dengan garis tipis 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN), // Set border right dengan garis tipis 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), // Set border bottom dengan garis tipis 'left' => array('style' => PHPExcel_Style_Border::BORDER_THIN) // Set border left dengan garis tipis ) ); // Buat sebuah variabel untuk menampung pengaturan style dari isi tabel $style_row = array( 'alignment' => array( 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER // Set text jadi di tengah secara vertical (middle) ), 'borders' => array( 'top' => array('style' => PHPExcel_Style_Border::BORDER_THIN), // Set border top dengan garis tipis 'right' => array('style' => PHPExcel_Style_Border::BORDER_THIN), // Set border right dengan garis tipis 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN), // Set border bottom dengan garis tipis 'left' => array('style' => PHPExcel_Style_Border::BORDER_THIN) // Set border left dengan garis tipis ) ); $excel->setActiveSheetIndex(0)->setCellValue('A1', "DATA SISWA"); // Set kolom A1 dengan tulisan "DATA SISWA" $excel->getActiveSheet()->mergeCells('A1:E1'); // Set Merge Cell pada kolom A1 sampai E1 $excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(TRUE); // Set bold kolom A1 $excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(15); // Set font size 15 untuk kolom A1 $excel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Set text center untuk kolom A1 // Buat header tabel nya pada baris ke 3 $excel->setActiveSheetIndex(0)->setCellValue('A3', "NO"); // Set kolom A3 dengan tulisan "NO" $excel->setActiveSheetIndex(0)->setCellValue('B3', "NIS"); // Set kolom B3 dengan tulisan "NIS" $excel->setActiveSheetIndex(0)->setCellValue('C3', "NAMA"); // Set kolom C3 dengan tulisan "NAMA" $excel->setActiveSheetIndex(0)->setCellValue('D3', "JENIS KELAMIN"); // Set kolom D3 dengan tulisan "JENIS KELAMIN" $excel->setActiveSheetIndex(0)->setCellValue('E3', "ALAMAT"); // Set kolom E3 dengan tulisan "ALAMAT" // Apply style header yang telah kita buat tadi ke masing-masing kolom header $excel->getActiveSheet()->getStyle('A3')->applyFromArray($style_col); $excel->getActiveSheet()->getStyle('B3')->applyFromArray($style_col); $excel->getActiveSheet()->getStyle('C3')->applyFromArray($style_col); $excel->getActiveSheet()->getStyle('D3')->applyFromArray($style_col); $excel->getActiveSheet()->getStyle('E3')->applyFromArray($style_col); // Panggil function view yang ada di SiswaModel untuk menampilkan semua data siswanya $siswa = $this->SiswaModel->view(); $no = 1; // Untuk penomoran tabel, di awal set dengan 1 $numrow = 4; // Set baris pertama untuk isi tabel adalah baris ke 4 foreach($siswa as $data){ // Lakukan looping pada variabel siswa $excel->setActiveSheetIndex(0)->setCellValue('A'.$numrow, $no); $excel->setActiveSheetIndex(0)->setCellValue('B'.$numrow, $data->nis); $excel->setActiveSheetIndex(0)->setCellValue('C'.$numrow, $data->nama); $excel->setActiveSheetIndex(0)->setCellValue('D'.$numrow, $data->jenis_kelamin); $excel->setActiveSheetIndex(0)->setCellValue('E'.$numrow, $data->alamat); // Apply style row yang telah kita buat tadi ke masing-masing baris (isi tabel) $excel->getActiveSheet()->getStyle('A'.$numrow)->applyFromArray($style_row); $excel->getActiveSheet()->getStyle('B'.$numrow)->applyFromArray($style_row); $excel->getActiveSheet()->getStyle('C'.$numrow)->applyFromArray($style_row); $excel->getActiveSheet()->getStyle('D'.$numrow)->applyFromArray($style_row); $excel->getActiveSheet()->getStyle('E'.$numrow)->applyFromArray($style_row); $no++; // Tambah 1 setiap kali looping $numrow++; // Tambah 1 setiap kali looping } // Set width kolom $excel->getActiveSheet()->getColumnDimension('A')->setWidth(5); // Set width kolom A $excel->getActiveSheet()->getColumnDimension('B')->setWidth(15); // Set width kolom B $excel->getActiveSheet()->getColumnDimension('C')->setWidth(25); // Set width kolom C $excel->getActiveSheet()->getColumnDimension('D')->setWidth(20); // Set width kolom D $excel->getActiveSheet()->getColumnDimension('E')->setWidth(30); // Set width kolom E // Set height semua kolom menjadi auto (mengikuti height isi dari kolommnya, jadi otomatis) $excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(-1); // Set orientasi kertas jadi LANDSCAPE $excel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); // Set judul file excel nya $excel->getActiveSheet(0)->setTitle("Laporan Data Siswa"); $excel->setActiveSheetIndex(0); // Proses file excel header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment; filename="Data Siswa.xlsx"'); // Set nama file excel nya header('Cache-Control: max-age=0'); $write = PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $write->save('php://output'); } } Pada controller ini, kita membuat 3 fungsi. fungsi pertama yaitu public function __construct(){, fungsi ini berfungsi untuk menjalankan suatu aksi ketika controller main diload. Didalam fungsi ini, terdapat kode $this->load->model(‘SiswaModel’);, kode tersebut berfungsi untuk memuat (meload) model siswa (yang pada step sebelumnya kita buat) agar kita bisa mengakses fungsi-fungsi yang ada didalam model tersebut. Fungsi yang kedua yaitu public function index(). Dalam fungsi ini ada kode $data[‘siswa’] = $this->SiswaModel->view();, kode tersebut digunakan untuk mengambil hasil query sql dari fungsi view() yang ada pada model siswa (SiswaModel.php) lalu memasukannya ke dalam array data dengan index siswa ($data[‘siswa’]). Pada fungsi index() ini juga, terdapat kode $this->load->view(‘view’, $data);. Kode tersebut berfungsi untuk memuat (meload) file view.php (file ini akan kita buat pada step selanjutnya) dan mengirimkan array data ($data) tadi ke file tersebut. Lalu pada function export(), disitu terdapat kode : $excel->setActiveSheetIndex(0)->setCellValue(‘A1’, “DATA SISWA”); Yang saya beri tanda panah itulah yang dimaksud dengan kolom A1. Saya harap Anda paham maksud saya. $excel->getActiveSheet()->mergeCells(‘A1:F1’); Setelah di merge akan menghasilkan seperti gambar berikut : Mungkin itu tambahan penjelasan dari skrip proses excel nya. untuk lebih lengkapnya mengenai fungsi apa saja yang disediakan oleh PHPExcel, Anda bisa membaca dokumentasinya langsung. Klik link berikut untuk download dokumentasi PHPExcel nya : Download. STEP 6 – BUAT VIEW <h2>Data Siswa</h2><hr> <a href="<?php echo base_url("index.php/siswa/export"); ?>">Export ke Excel</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> Pada kode diatas terdapat kode foreach($siswa as
$data){, kode tersebut akan manampilkan satu per satu data siswa sampai data siswa yang terakhir. Mungkin sekian untuk catatan kali ini. Semoga bisa bermanfaat. Jika ada yang kurang dipahami, langsung tanyakan pada form komentar dibawah ini. Jangan lupa LIKE dan SHARE nya, Terimakasih banyak. Happy Coding ^_^ SOURCE CODE SUMBER & REFERENSI PHPExcel(Total : 44,215 viewers, 1 viewers today) |