Beberapa waktu lalu, gua pernah buat artikel mengenai Export Data MySQL ke File XLSX dengan Codeigniter 3. Nah, kali ini, gua akan coba buat artikel lagi tentang export data lagi dengan Codeigniter 3.
Bedanya dengan artikel sebelumnya, kali ini gua coba membuat fungsi dimana user dapat memilih terlebih dahulu kolom data yang ingin diexport sebelum proses export. Selain itu, dari sisi kode program juga gua coba buat lebih efektif dan efisien.
Oke langsung aja gimana cara buatnya dan kodingannya.
Oh iya, seperti biasa studi kasus dan data yang gua gunakan, hanya sebagai contoh ya..silahkan disesuaikan dengan studi kasus kalian.
Download dan install Codeigniter 3 (pada artikel ini, gua tidak menjelaskan mengenai konfigurasi dasar Codeigniter 3 hingga sampai siap digunakan ya..)
Untuk proses export data ke dalam bentuk file excel, gua menggunakan library Phpspreadsheet. Silahkan kalian install library ini di dalam folder projek Codeigniter kalian melalui composer dengan command:
composer require phpoffice/phpspreadsheet
Selanjutnya adalah, membuat database serta data dummy yang nantinya data tersebut akan di export ke dalam file xlsx. Kalian bisa menggunakan data dummy yang gua buat atau langsung kalian sesuaikan dengan studi kasus kalian. Berikut untuk syntax SQL nya
Disini gua coba menggunakan data ‘Buku’ yang gua ambil dari gramedia.co.id. Alasannya, karena kolom data buku ini dapat cukup banyak. Sehingga, lebih sesuai dengan studi kasus kali ini.
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `tutorial`
--
-- --------------------------------------------------------
--
-- Table structure for table `buku`
--
CREATE TABLE `buku` (
`id` int NOT NULL,
`judul` varchar(255) NOT NULL,
`isbn` varchar(255) NOT NULL,
`penerbit` varchar(255) NOT NULL,
`tgl_terbit` date NOT NULL,
`jml_halaman` varchar(15) NOT NULL,
`panjang` varchar(15) NOT NULL,
`lebar` varchar(15) NOT NULL,
`berat` varchar(15) NOT NULL,
`deskripsi` text NOT NULL,
`penulis` varchar(255) NOT NULL,
`kategori` varchar(255) NOT NULL,
`harga` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
--
-- Dumping data for table `buku`
--
INSERT INTO `buku` (`id`, `judul`, `isbn`, `penerbit`, `tgl_terbit`, `jml_halaman`, `panjang`, `lebar`, `berat`, `deskripsi`, `penulis`, `kategori`, `harga`) VALUES
(1, 'Atomic Habits: Perubahan Kecil yang Memberikan Hasil Luar Biasa', '9786020633176', 'Gramedia Pustaka Utama', '2019-09-16', '352', '23.0', '15.0', '0.37', 'Atomic Habits: Perubahan Kecil yang Memberikan Hasil Luar Biasa adalah buku kategori self improvement karya James Clear. Pada umumnya, perubahan-perubahan kecil seringkali terkesan tak bermakna karena tidak langsung membawa perubahan nyata pada hidup suatu manusia. Jika diumpamakan sekeping koin tidak bisa menjadikan kaya, suatu perubahan positif seperti meditasi selama satu menit atau membaca buku satu halaman setiap hari mustahil menghasilkan perbedaan yang bisa terdeteksi. Namun hal tersebut tidak sejalan dengan pemikiran James Clear, ia merupakan seorang pakar dunia yang terkenal dengan \'habits\' atau kebiasaan. Ia tahu bahwa tiap perbaikan kecil bagaikan menambahkan pasir ke sisi positif timbangan dan akan menghasilkan perubahan nyata yang berasal dari efek gabungan ratusan bahkan ribuan keputusan kecil. Ia menamakan perubahan kecil yang membawa pengaruh yang luar biasa dengan nama atomic habits.\r\n\r\nDalam buku ini James Clear, seorang penulis sekaligus pembicara yang sangat terkenal akan topik \'habit\' memaparkan bahwa pada hakikatnya sebuah perubahan kecil (Atomic Habit) sering dianggap remeh, sebenarnya akan memberikan hasil yang sangat menjanjikan dalam hidup. Yang dipandang penting dalam perubahan perilaku bukan satu persen perbaikan tunggal, melainkan ribuan perbaikan atau sekumpulan atomic habits yang saling bertumpuk dan menjadi unit dasar dalam suatu sistem yang penting.\r\n\r\nJames Clear menjelaskan bahwa terdapat tiga tingkat perubahan yaitu perubahan hasil, perubahan proses, dan perubahan identitas. Cara paling efektif dalam mengubah kebiasaan adalah bukan berfokus pada apa yang ingin dicapai, melainkan tipe orang seperti apa yang diinginkan. Identitas seseorang muncul dari kebiasaan yang dilakukan setiap harinya. Alasan utama kebiasaan penting karena kebiasaan dapat mengubah keyakinan tentang diri sendiri.\r\n\r\nClear juga memperkenalkan empat Kaidah Perubahan Perilaku untuk membantu mengubah perilaku manusia yaitu menjadikannya terlihat, menjadikannya menarik, menjadikannya mudah, menjadikannya memuaskan. Keempat kaidah ini tidak hanya mengajari kita cara menciptakan kebiasaan-kebiasaan baru, melainkan menyingkapi sejumlah wawasan menarik tentang perilaku manusia.', 'James Clear', 'Pengembangan Diri', '86400'),
(2, 'Membangun Peradaban Dunia', '9786233468909', 'Penerbit Buku Kompas', '2023-07-05', '280', '23.5', '19.0', '0.3', 'Taman Ismail Marzuki yang dibangun tahun 1968 diniatkan sebagai pusat kesenian yang bebas dari intervensi kekuasaan. Para seniman tidak ingin diatur-atur oleh partai dan penguasa politik seperti yang terjadi di era Demokrasi Terpimpin. Periode Gubernur Ali Sadikin, TIM benar-benar menjadi ekosistem kesenian yang menggairahkan seniman dengan karya-karyanya yang fenomenal.\r\n\r\nBang Ali kemudian dicopot Presiden Soeharto pada 1977, yang diikuti dengan campur tangan birokrat. Setelah itu TIM mengalami kemunduran, seiring dengan munculnya gedung-gedung kesenian di Jakarta. Berbagai upaya dilakukan para Gubernur Jakarta untuk membangkitkan TIM. Gubernur Fauzi Bowo menggelar Sayembara Revitalisasi TIM pada 2007 yang dimenangkan arsitek Andra Matin dengan tema \"Rayuan Pulau Kelapa\".\r\n\r\nSayembara itu akhirnya mulai direalisasikan pada perayaan TIM yang ke-50 di masa Gubernur Anies Baswedan. \"The new TIM\" dibuka untuk umum pada 2022 dan kawasan hijau di Cikini ini langsung menjadi destinasi favorit kaum muda. Buku ini menceritakan dinamika pembangunan TIM yang terjadi di panggung depan dan belakang, sejarah pengelolaan TIM selama setengah abad, serta model pengelolaan TIM ke depan. Buku ini kaya dengan infografis yang memudahkan pembaca menikmati narasi dengan gaya bercerita (storytelling).\r\n\r\nProfil Penulis:\r\nUntung Widyanto\r\nKarier jurnalistiknya dimulai sebagai wartawan majalah Editor, dilanjutkan ke Tiras dan majalah Tajuk. Pada tahun 2001 bergabung ke grup Tempo (Koran Tempo, majalah Tempo, dan Tempo.co) hingga purnabakti tahun 2019. Lulusan S-1 dan S-2 Sosiologi FISIP UI ini menjadi Ketua Dewan Pengawas The Society of Indonesian Environmental Journalists (2013-2016) dan pengurus/andalan Kwarnas Gerakan Pramuka. Saat ini sebagai wartawan lepas, penulis, peneliti, dan pengajar.', 'UNTUNG WIDYANTO, DKK.', 'Arsitektur', '89100'),
(3, 'Untung Dari Bisnis Domba & Kambing Ala Mt Farm', '9789790066212', 'Kawah Media', '2020-07-31', '149', '23.0', '15.0', '0.245', 'Buku ini merupakan buku yang memberi ilmu kepada para masyarakat khususnya dalam bidang peternakan.\r\n\r\nBanyak peternak menganggap prospek usaha beternak domba dan kambing hanya terjadi pada saat Hari Raya Kurban. Anggapan ini bukan tanpa alasan. Pada momen itu Jumlah permintaan dan harga jual kambing dan domba naik berlipat daripada hari biasa.\r\n\r\nSebenarnya selain penjualan domba dan kambing hidup, peternak juga bisa memaksimalkan keuntungan dengan menjual dan mengolah bagian lain dari ternak, seperti karkasnya, kulitnya, bahkan kotorannya. Dengan cara itu profit yang didapat pun menjadi berlipat.\r\n\r\nHal inilah yang diterapkan oleh MT Farm, sebuah farm peternakan ruminansia yang berdomisili di Bogor, Jawa Barat. Bagi MT Farm, semua hal yang ada di ternak dapat menghasilkan rupiah. Mereka menyebutnya sistem integrasi. Terbukti, usaha ternak bertambah besar.\r\n\r\nMelalui buku ini, MT Farm mencoba berbagi pengalamannya kepada para peternak atau siapapun yang ingin memulai usaha ternak kambing dan domba. Dengan harapan informasi yang dibukukan ini menjadi inspirasi agar para peternak dapat terus berinovasi dalam menghadapi persaingan usaha.', 'Mitra Tani Farm', 'Alam', '59400');
--
-- Indexes for dumped tables
--
--
-- Indexes for table `buku`
--
ALTER TABLE `buku`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `buku`
--
ALTER TABLE `buku`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Silahkan buat file model dan ketikkan atau copy kode program seperti di bawah ini. Disini gua memberikan nama file modelnya adalah Manage_spreadsheet2_model.php. Penamaan file ini tidak baku ya, jadi terserah kalian mau memberikan nama file apa, dengan syarat nama class nya sama dengan nama filenya ya..
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Manage_spreadsheet2_model extends CI_Model{
function __construct(){
parent::__construct();
$this->db = $this->load->database('default',TRUE);
}
function get_data($field){
$db = $this->db;
$Q = $db->select($field)
->from("buku")
->order_by("tgl_terbit", 'DESC')
->get();
$res = $Q->result_array();
return $res;
}
}
File view ini berfungsi untuk menampilkan data dummy dalam bentuk tabel dan menampilkan tombol “Export” untuk trigger awal proses export data. Pada file view ini, gua menggunakan Bootstrap 4 dan plugin Duallistbox untuk tampilan proses pemilihan kolom data.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Eksport Data Excel</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
<!-- DUALLISTBOX :START -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap4-duallistbox/4.0.2/jquery.bootstrap-duallistbox.min.js" integrity="sha512-l/BJWUlogVoiA2Pxj3amAx2N7EW9Kv6ReWFKyJ2n6w7jAQsjXEyki2oEVsE6PuNluzS7MvlZoUydGrHMIg33lw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap4-duallistbox/4.0.2/bootstrap-duallistbox.min.css" integrity="sha512-BcFCeKcQ0xb020bsj/ZtHYnUsvPh9jS8PNIdkmtVoWvPJRi2Ds9sFouAUBo0q8Bq0RA/RlIncn6JVYXFIw/iQA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<!-- DUALLISTBOX :END -->
</head>
<body>
<div class="jumbotron text-center">
<h1>Data Buku</h1>
</div>
<div class="container">
<div class="row">
<div class="col-12">
<button class="btn btn-success btn-sm float-right" id="export-btn" type="button">Export</button>
</div>
</div>
</br>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Judul</th>
<th scope="col">ISBN</th>
<th scope="col">Penerbit</th>
<th scope="col">Tanggal Terbit</th>
<th scope="col">Jumlah Halaman</th>
</tr>
</thead>
<tbody>
<?php foreach ($buku as $key => $value) { ?>
<tr>
<th scope="row"><?php echo intval($key+1) ?></th>
<td><?php echo $value['judul'] ?></td>
<td><?php echo $value['isbn'] ?></td>
<td><?php echo $value['penerbit'] ?></td>
<td><?php echo $value['tgl_terbit'] ?></td>
<td><?php echo $value['jml_halaman'] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- MODAL : START -->
<div class="modal" id="export-modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Export Data Buku</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Silahkan pilih kolom data yang ingin di export</p>
<div class="row">
<div class="col-12 px-0 px-md-3">
<form id="export-form" method="POST">
<select class="padding-sm" id="field_buku" name="field_buku[]" multiple="multiple">
<option value="judul">Judul</option>
<option value="isbn">ISBN</option>
<option value="penerbit">Penerbit</option>
<option value="tgl_terbit">Tanggal Terbit</option>
<option value="jml_halaman">Jumlah Halaman</option>
<option value="panjang">Panjang</option>
<option value="lebar">Lebar</option>
<option value="berat">Berat</option>
<option value="deskripsi">Deskripsi</option>
<option value="penulis">Penulis</option>
<option value="kategori">Kategori</option>
<option value="harga">Harga</option>
</select>
</form>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" id="do-export-btn" class="btn btn-primary">Export Data</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- MODAL : END -->
</body>
<script type="text/javascript">
$('#export-btn').on('click', function () {
$('#export-modal').modal('show');
})
$('#do-export-btn').click(function(e){
$.ajax({
url: "/manage_spreadsheet2/do_export", // Ganti dengan URL endpoint CodeIgniter Anda
type: "POST",
data: $('#export-form').serialize(),
xhrFields: {
responseType: 'blob' // Agar respons diproses sebagai file biner
},
success: function(data, status, xhr) {
// Mendapatkan nama file dari header
const filename = xhr.getResponseHeader('Content-Disposition').split('filename=')[1].replace(/"/g, '');
// Membuat link unduhan
const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
$('#export-modal').modal('hide');
},
error: function(xhr, status, error) {
if( xhr.status == 404 ) { //Validation error or other reason for Bad Request 400
alert("Maaf, data tidak ditemukan");
$('#export-modal').modal('hide');
}
}
});
});
$("#field_buku").bootstrapDualListbox();
</script>
</html>
Pada file ini lah fungsi untuk proses export data di backend kita definisikan. Nah, untuk penjelasan setiap baris kode program, gua coba jelaskan di dalam kode program aja yang gua kasih komentar ya..
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
//load package composer
require 'vendor/autoload.php';
//deklarasi package yang ingin digunakan
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class Manage_spreadsheet2 extends CI_Controller {
public function index()
{
$this->load->model('manage_spreadsheet2_model');
$data['buku'] = $this->manage_spreadsheet2_model->get_data('*');
$this->load->view('manage_spreadsheet2/index',$data);
}
public function do_export()
{
$this->load->model('manage_spreadsheet2_model');
//Get parameter daftar field atau kolom data yang ingin di eksport
//jika tidak memilih daftar field, default nya akan eksport semua field atau kolom data
$field_arr = $this->input->post('field_buku');
if(empty($field_arr)){
$field_arr = array('id', 'judul', 'isbn', 'penerbit', 'tgl_terbit', 'jml_halaman', 'panjang', 'lebar', 'berat', 'deskripsi', 'penulis', 'kategori', 'harga');
}
$field = implode(",", $field_arr);
//Get data buku dari database
$data_buku = $this->manage_spreadsheet2_model->get_data($field);
//Lakukan proses export data buku, jika data siswa tidak kosong
if(!empty($data_buku)){
//inisialisasi object library php spreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Variabel untuk menampung pengaturan style title, row header, dan row data tabel
//Style title
$style_title = [
// Set font bold
'font' => ['bold' => true],
//Set aligntment di middle
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, // Set text jadi ditengah secara horizontal (center)
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER // Set text jadi di tengah secara vertical (middle)
]
];
// Style row header
$style_col = [
// Set font bold
'font' => ['bold' => true],
//Set aligntment di middle
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER
],
//Set border atas, bawah, kanan kiri cell dengan garis tipis
'borders' => [
'top' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],
'right' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],
'bottom' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],
'left' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN]
]
];
// Style row data
$style_row = [
//Set aligntment di tengah
'alignment' => [
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER
],
//Set border atas, bawah, kanan kiri cell dengan garis tipis
'borders' => [
'top' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],
'right' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],
'bottom' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],
'left' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN]
]
];
//Proses membuat baris untuk header kolom data
//dimulai dari kolom A, baris 3 ( cell A3)
//proses dilakukan secara looping sebanyak jumlah field yang tersimpan dalam variabel $field_arr
$kolom='A';$baris=3;
foreach ($field_arr as $key => $v)
{
$sheet->setCellValue($kolom.$baris, str_replace('_', ' ',ucfirst($v)));
$sheet->getStyle($kolom.$baris)->applyFromArray($style_col);
$kolom++;
}
// [Ini adalah Optional] Proses membuat judul data "DATA BUKU" dimulai dari cell A1
// dan di merge cell sebanyak kolom header
$sheet->setCellValue('A1', "DATA BUKU");
$sheet->mergeCells('A1:'.$kolom.'1');
$sheet->getStyle('A1:'.$kolom.'1')->applyFromArray($style_title);
// Proses membuat baris data :START
// Set baris pertama untuk data tabel dimulai dari baris 4
// looping pertama untuk looping jumlah baris data
$baris = 4;
foreach($data_buku as $baris_index => $b_data)
{
//looping kedua untuk looping kolom data di setiap baris data
//dimulai dari kolom A
$kolom='A';
foreach ($b_data as $kolom_index => $k_data)
{
$sheet->setCellValue($kolom.$baris, $k_data);
$sheet->getStyle($kolom.$baris)->applyFromArray($style_row);
//set width cell menyesuaikan panjang isi cell
$sheet->getColumnDimension($kolom)->setAutoSize(true);
$kolom++;
}
$baris++;
}
// Proses membuat baris data :END
// Set height semua kolom menjadi auto (mengikuti height isi dari kolommnya, jadi otomatis)
$sheet->getDefaultRowDimension()->setRowHeight(-1);
// Set orientasi kertas LANDSCAPE
$sheet->getPageSetup()->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
// Set judul sheet
$sheet->setTitle("Data Buku");
// Proses download file excel
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="DataBuku.xlsx"'); // Set nama file excel nya
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
}else{
// $result['status'] = 'error';
$result['msg'] = 'Export Data Gagal, Data Buku Tidak Tersedia';
$this->output->set_status_header('404');
echo '{"statusText":"Tidak ada data yang tersedia!"}';
}
}
}
Silahkan coba kalian akses fungsi controller atau route yang akan menampilkan data dan tombol export yang telah kita buat pada file view. Karena disini gua tidak mendefinisikan URL melalui file route.php, maka gua langsung akses langsung ke class controller nya dengan format URL “/manage_spreadsheet2/buku”. “manage_spreadsheet2” adalah nama file atau class controller nya, dan “buku” adalah fungsi method yang diakses.
Jika tidak ada error, selanjutnya akan menampilkan data buku dalam bentuk tabel dan tombol export yang ada di kanan atas tabel.
![Tutorial Eksport Data dari MySQL ke File Excel [docs/kuhomi.id].](http://manage.kuhomi.id/assets/img/gallery/1734896960442.png)
Selanjutnya klik tombol “Export”, lalu akan menampilkan pilihan kolom data yang ingin kita export dalam bentuk modal.
![Modal untuk Pilih Kolom Data yang Ingin di Eksport [docs/kuhomi.id].](http://manage.kuhomi.id/assets/img/gallery/1734899173178.png)
Silahkan kalian coba pilih kolom data mana saja yang ingin di export, jika sudah silahkan klik tombol “Submit” untuk proses export data.
Jika berhasil, browser akan otomatis mengunduh file excel yang berisikan data buku dengan kolom data yang telah kita pilih.