Please enable JavaScript!
Bitte aktiviere JavaScript!
S'il vous plaît activer JavaScript!
Por favor,activa el JavaScript!
antiblock.org

 |  |  | 
Anda ingin membuat website?
Untuk Anda yang sedang mencari orang untuk jasa pembuatan website, Saya akan bantu buatkan aplikasi sesuai kebutuhan Anda. Segera hubungi : mail@rizaldimaulidia.com. Selengkapnya tentang profil saya klik www.rizaldimaulidia.com.

PHP Tips and Trick

Cara Membuat Export Excel Plus Filter Tanggal dengan PHPExcel

img-responsive

Sebelumnya saya sudah pernah membuat laporan pdf plus filter tanggal. Yang akan kita bahas kali ini sama kaya tutorial tersebut hanya saja kita akan export ke excel bukan pdf. Filter tanggal ini akan sangat berguna untuk membuat fitur laporan yang sesuai kebutuhan klien. Kadang kala, kita diharuskan membuat laporan per hari atau per bulan atau bahkan per tahun. Yap dengan tutorial ini masalah tersebut akan terpecahkan. Mari simak step by step nya berikut ini.


PENTING, MOHON DIBACA TERLEBIH DAHULU
Tutorial ini menggunakan librari PHPExcel untuk proses import excelnya. Librari ini setau saya dan sudah saya tes hanya mendukung sampai PHP Versi 7.2.8. Jadi bagi kamu yang pakai PHP Versi diatas 7.2.8, sebaiknya downgrade dulu atau download Xampp dimana PHP nya masih versi 7.2.8 ke bawah. Untuk tutorial PHP Versi 7.2.8 ke atas akan saya buatkan, jadi tunggu saja update tutorial selanjutnya.

Berikut ini untuk link download Xampp Versi 7.2.8 :


SOURCE CODE
Dalam catatan / tutorial ini, saya sudah menyiapkan 6 source code berbeda, yakni Versi MySQLi dan PDO. Dari kedua versi source code tersebut, saya bagi lagi menjadi Versi Tanpa Bootstrap, Versi Bootstrap 3 dan Versi Bootstrap 4. Jadi Kamu bisa Download sesuai kebutuhan masing-masing. Source code tersebut bisa kamu download pada bagian akhir tutorial ini.

Pada tutorial ini kita akan menggunakan bootstrap 3 untuk pembahasannya.


 DEMO
Sebelum masuk ke tutorialnya. Mungkin ada yang mau lihat demonya terlebih dahulu. Silahkan klik link berikut untuk melihat demonya : Lihat Demo.


STEP 1 – PERSIAPAN
Berikut ini adalah hal-hal yang harus dipersiapkan :

  1. Download plugin PHPExcel, klik link berikut : Download.
  2. Download Bootstrap Datepicker, klik link berikut ini : Download.
    Librari ini akan kita gunakan agar Filter Tanggalnya menggunakan Datepicker.
  3. Download Bootstrap 3, klik link berikut ini : Download.
    Bootstrap 3 ini akan kita gunakan untuk Desain yang lebih bagus.
  4. Download jQuery, klik link berikut ini : Download.
  5. Buat sebuah folder baru dengan nama export_phpexcel, lalu simpan pada folder xampp/htdocs/.
  6. Buat sebuah folder dengan nama libraries, lalu simpan pada folder xampp/htdocs/export_phpexcel/.
  7. Ekstrak file PHPExcel.7z yang telah di download tadi, lalu copy and paste folder PHPExcel nya ke folder xampp/htdocs/export_phpexcel/libraries/.
  8. Ekstrak file bootstrap-datepicker.7z yang sudah didownload tadi, lalu copy and paste folder bootstrap-datepicker nya ke folder xampp/htdocs/export_phpexcel/libraries/.
  9. Ekstrak file bootstrap.7z yang sudah didownload.
  10. Copy folder css yang ada didalam folder bootstrap hasil ekstrak tadi. kemudian simpan pada folder xampp/htdocs/export_phpexcel/.
  11. Copy folder fonts yang ada didalam folder bootstrap hasil ekstrak tadi. kemudian simpan pada folder xampp/htdocs/export_phpexcel/.
  12. Copy folder js yang ada didalam folder bootstrap hasil ekstrak tadi. kemudian simpan pada folder xampp/htdocs/export_phpexcel/.
  13. Copy file jquery.min.js yang sudah didownload ke folder xampp/htdocs/export_phpexcel/js/.

STEP 2 – DATABASE
Pada step ini, kita akan membuat databasenya. ikuti langkah-langkah berikut ini :

  1. Buat sebuah database dengan nama mynotescode.
  2. Buat sebuah tabel dengan nama transaksi. Struktur tabelnya sebagai berikut :
    Struktur Tabel - Cara Membuat Export Excel Plus Filter Tanggal dengan PHPExcel

    CREATE TABLE `transaksi` (
     `id` int(11) NOT NULL,
     `kode` varchar(10) NOT NULL,
     `barang` varchar(100) NOT NULL,
     `jumlah` int(11) NOT NULL,
     `total_harga` double NOT NULL,
     `tgl` datetime NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1


STEP 3 – KONEKSI DATABASE
Pada step ini, kita akan membuat file php yang berfungsi untuk menghubungkan dengan database MySQL. Silahkan buat file koneksi.php, lalu simpan di folder xampp/htdocs/export_phpexcel/. Berikut ini kodenya :

<?php
$host = 'localhost'; // Nama hostnya
$username = 'root'; // Username
$password = ''; // Password (Isi jika menggunakan password)
$database = 'mynotescode'; // Nama databasenya

// Koneksi ke MySQL dengan PDO
$pdo = new PDO('mysql:host='.$host.';dbname='.$database, $username, $password);
?>

STEP 4 – VIEW DATA
Langkah selanjutnya adalah membuat halaman untuk view data transaksi dari database. Buat sebuah file dengan nama index.php, lalu simpan di folder xampp/htdocs/export_phpexcel/. Berikut ini tampilan dan kodenya :

<?php
// Load file koneksi.php
include "koneksi.php";
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <title>Export Excel Plus Filter Tanggal</title>

  <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- Include file bootstrap.min.css -->
  <link href="libraries/bootstrap-datepicker/css/bootstrap-datepicker.min.css" rel="stylesheet"> <!-- Include file bootstrap-datepicker.min.css -->

  <script src="js/jquery.min.js"></script> <!-- Load file jquery -->
</head>
<body style="padding: 0 20px;">
  <h2>Data Transaksi</h2><hr>

    <form method="get" action="">
        <div class="row">
      <div class="col-sm-3 col-md-2">
        <div class="form-group">
          <label>Filter Berdasarkan</label>
              <select name="filter" id="filter" class="form-control">
                  <option value="">Pilih</option>
                  <option value="1">Per Tanggal</option>
                  <option value="2">Per Bulan</option>
                  <option value="3">Per Tahun</option>
              </select>
        </div>
      </div>
    </div>
        <div class="row" id="form-tanggal">
      <div class="col-sm-3 col-md-2">
        <div class="form-group">
          <label>Tanggal</label>
                <input type="text" name="tanggal" class="form-control datepicker" autocomplete="off" />
        </div>
      </div>
    </div>
        <div class="row">
      <div class="col-sm-3 col-md-2" id="form-bulan">
        <div class="form-group">
          <label>Bulan</label>
          <select name="bulan" class="form-control">
                    <option value="">Pilih</option>
                    <option value="1">Januari</option>
                    <option value="2">Februari</option>
                    <option value="3">Maret</option>
                    <option value="4">April</option>
                    <option value="5">Mei</option>
                    <option value="6">Juni</option>
                    <option value="7">Juli</option>
                    <option value="8">Agustus</option>
                    <option value="9">September</option>
                    <option value="10">Oktober</option>
                    <option value="11">November</option>
                    <option value="12">Desember</option>
                </select>
        </div>
      </div>
      <div class="col-sm-3 col-md-2" id="form-tahun">
        <div class="form-group">
          <label>Tahun</label>
          <select name="tahun" class="form-control">
                    <option value="">Pilih</option>
                    <?php
                    $query = "SELECT YEAR(tgl) AS tahun FROM transaksi GROUP BY YEAR(tgl)"; // Tampilkan tahun sesuai di tabel transaksi
                    $sql = mysqli_query($connect, $query); // Eksekusi/Jalankan query dari variabel $query

                    while($data = mysqli_fetch_array($sql)){ // Ambil semua data dari hasil eksekusi $sql
                        echo '<option value="'.$data['tahun'].'">'.$data['tahun'].'</option>';
                    }
                    ?>
                </select>
        </div>
      </div>
    </div>

        <button type="submit" class="btn btn-primary">Tampilkan</button>
        <a href="index.php" class="btn btn-default">Reset Filter</a>
    </form>
    <hr />

    <?php
    if(isset($_GET['filter']) && ! empty($_GET['filter'])){ // Cek apakah user telah memilih filter dan klik tombol tampilkan
        $filter = $_GET['filter']; // Ambil data filder yang dipilih user

        if($filter == '1'){ // Jika filter nya 1 (per tanggal)
            $tgl = date('d-m-y', strtotime($_GET['tanggal']));

            echo '<b>Data Transaksi Tanggal '.$tgl.'</b><br /><br />';
            echo '<a href="proses.php?filter=1&tanggal='.$_GET['tanggal'].'" class="btn btn-success btn-xs">Export Excel</a><br /><br />';

            $query = "SELECT * FROM transaksi WHERE DATE(tgl)='".$_GET['tanggal']."'"; // Tampilkan data transaksi sesuai tanggal yang diinput oleh user pada filter
        }else if($filter == '2'){ // Jika filter nya 2 (per bulan)
            $nama_bulan = array('', 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember');

            echo '<b>Data Transaksi Bulan '.$nama_bulan[$_GET['bulan']].' '.$_GET['tahun'].'</b><br /><br />';
            echo '<a href="proses.php?filter=2&bulan='.$_GET['bulan'].'&tahun='.$_GET['tahun'].'" class="btn btn-success btn-xs">Export Excel</a><br /><br />';

            $query = "SELECT * FROM transaksi WHERE MONTH(tgl)='".$_GET['bulan']."' AND YEAR(tgl)='".$_GET['tahun']."'"; // Tampilkan data transaksi sesuai bulan dan tahun yang diinput oleh user pada filter
        }else{ // Jika filter nya 3 (per tahun)
            echo '<b>Data Transaksi Tahun '.$_GET['tahun'].'</b><br /><br />';
            echo '<a href="proses.php?filter=3&tahun='.$_GET['tahun'].'" class="btn btn-success btn-xs">Export Excel</a><br /><br />';

            $query = "SELECT * FROM transaksi WHERE YEAR(tgl)='".$_GET['tahun']."'"; // Tampilkan data transaksi sesuai tahun yang diinput oleh user pada filter
        }
    }else{ // Jika user tidak mengklik tombol tampilkan
        echo '<b>Semua Data Transaksi</b><br /><br />';
        echo '<a href="proses.php" class="btn btn-success btn-xs">Export Excel</a><br /><br />';

        $query = "SELECT * FROM transaksi ORDER BY tgl"; // Tampilkan semua data transaksi diurutkan berdasarkan tanggal
    }
    ?>

    <div class="table-responsive">
    <table class="table table-bordered">
        <tr>
            <th>Tanggal</th>
            <th>Kode Transaksi</th>
            <th>Barang</th>
            <th>Jumlah</th>
            <th>Total Harga</th>
        </tr>
        <?php
        $sql = mysqli_query($connect, $query); // Eksekusi/Jalankan query dari variabel $query
        $row = mysqli_num_rows($sql); // Ambil jumlah data dari hasil eksekusi $sql

        if($row > 0){ // Jika jumlah data lebih dari 0 (Berarti jika data ada)
            while($data = mysqli_fetch_array($sql)){ // Ambil semua data dari hasil eksekusi $sql
                $tgl = date('d-m-Y', strtotime($data['tgl'])); // Ubah format tanggal jadi dd-mm-yyyy

                echo "<tr>";
                echo "<td>".$tgl."</td>";
                echo "<td>".$data['kode']."</td>";
                echo "<td>".$data['barang']."</td>";
                echo "<td>".$data['jumlah']."</td>";
                echo "<td>".$data['total_harga']."</td>";
                echo "</tr>";
            }
        }else{ // Jika data tidak ada
            echo "<tr><td colspan='5'>Data tidak ada</td></tr>";
        }
        ?>
      </table>
  </div>

  <script src="js/bootstrap.min.js"></script> <!-- Include file boootstrap.min.js -->
    <script src="libraries/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script> <!-- Include library Bootstrap Datepicker -->
    <script>
    $(document).ready(function(){ // Ketika halaman selesai di load
        setDatePicker() // Panggil fungsi setDatePicker

        $('#form-tanggal, #form-bulan, #form-tahun').hide(); // Sebagai default kita sembunyikan form filter tanggal, bulan & tahunnya

        $('#filter').change(function(){ // Ketika user memilih filter
            if($(this).val() == '1'){ // Jika filter nya 1 (per tanggal)
                $('#form-bulan, #form-tahun').hide(); // Sembunyikan form bulan dan tahun
                $('#form-tanggal').show(); // Tampilkan form tanggal
            }else if($(this).val() == '2'){ // Jika filter nya 2 (per bulan)
                $('#form-tanggal').hide(); // Sembunyikan form tanggal
                $('#form-bulan, #form-tahun').show(); // Tampilkan form bulan dan tahun
            }else{ // Jika filternya 3 (per tahun)
                $('#form-tanggal, #form-bulan').hide(); // Sembunyikan form tanggal dan bulan
                $('#form-tahun').show(); // Tampilkan form tahun
            }

            $('#form-tanggal input, #form-bulan select, #form-tahun select').val(''); // Clear data pada textbox tanggal, combobox bulan & tahun
        })
    })

  function setDatePicker(){
    $(".datepicker").datepicker({
      format: "yyyy-mm-dd",
      todayHighlight: true,
      autoclose: true
    }).attr("readonly", "readonly").css({"cursor":"pointer", "background":"white"});
  }
    </script>
</body>
</html>

Pada halaman ini, kita membuat sebuah form untuk filter data transaksinya. Dimana isi dari combo box filter adalah Per Tanggal, Per Bulan dan Per Tahun. Khusus untuk combo box Tahun, kita isi sesuai dengan data transaksi yang ada didatabase. Jadi nanti pilihan tahunnya menyesuaikan dengan data transaksi di database ada pada tahun berapa saja.

$tgl = date(‘d-m-y‘, strtotime($_GET[‘tanggal’]));
Kode ini untuk mengubah format tanggal menjadi dd-mm-yyyy. Disini terdapat 2 fungsi yakni date() dan strtotime(). Fungsi date berfungsi untuk menentukan format waktu yang kita ingin kan, isi dari parameter 1 adalah format yang kita inginkan, disini kita isi dengan d-m-y. Lebih lengkapnya soal isi dari parameter 1 di fungsi date() bisa anda lihat disini : Dokumentasi Fungsi Date(). Untuk strtotime() adalah sebuah kode yang berguna untuk mengubah string menjadi time. Karna paramater 2 dari fungsi date() adalah waktu yang akan diubah formatnya (dalam bentuk time). Sehingga disini kita akan mengubah data tanggal dari form filter yang formatnya yyyy-mm-dd dan tipenya string menjadi tipe time agar bisa di ubah formatnya dengan fungsi date().

$nama_bulan = array(”, ‘Januari’,’Februari’,…..
Kode ini akan kita gunakan untuk mengubah data bulan dari form filter manjadi nama bulan itu sendiri dalam bahasa indonesia. Bisa di lihat pada form filter untuk combo box bulan, disitu ada tag option dimana isinya adalah angka dimulai dari 1 untuk januari, 2 untuk februari, dan seterusnya. Nah angka dari value tadi akan kita ubah menjadi nama bulan sesuai dengan value nya dan kita panggil pada variabel $nama_bulan[value_bulannya]. Untuk informasi, index array dimulai dari 0, sehingga bisa kita lihat pada variabel $nama_bulan isi array pertama sengaja saya kosongkan karna index 0 tidak kita pakai soalnya bulan januari dimulai dari 1.

$sql = mysqli_query($connect, $query);
Untuk mengeksekusi / menjalankan query sql. struktur dasar penulisannya adalah sebagai berikut :

mysqli_query($connect, $query);

/*
Keterangan :
- $connect : diisi dengan koneksi ke mysql. hasil dari mysqli_connect
- $query : diisi dengan Query SQL yang diinginkan
*/

mysqli_num_rows($sql);
Untuk mengambil jumlah data dari hasil eksekusi suatu query sql. Struktur dasar penulisannya adalah sebagai berikut :

mysqli_num_rows($sql);

/*
Keterangan :
- $sql : diisi dengan hasil eksekusi query sql(mysql_query())
*/

mysqli_fetch_array($sql);
Untuk mengambil data dari hasil eksekusi suatu query sql. Struktur dasar penulisannya adalah sebagai berikut :

mysqli_fetch_array($sql);

/*
Keterangan :
- $sql : diisi dengan hasil eksekusi query sql(mysql_query())
*/

Kode diatas saya simpan didalam looping while berfungsi untuk melakukan proses perulangan sampai data terkahir dengan tujuan agar kita bisa menampilkan datanya satu per satu.

echo "<td>".$data['kode']."</td>";
echo "<td>".$data['barang']."</td>";
echo "<td>".$data['jumlah']."</td>";
echo "<td>".$data['total_harga']."</td>";

Pada kode diatas terdapat variabel $data digunakan untuk mengambil isi dari field-field yang ada pada tabel transaksi di database mynotescode. Pada kode diatas juga ada kode yang berada di dalam tanda [‘…..’], kode tersebut harus sama dengan nama field yang ada pada tabel transaksi.

Oh ya selain itu juga disini kita membuat sebuah function di javascript dengan nama setDatePicker() yang berfungsi untuk menset textbox menjadi inputan Tanggal (DatePicker). Disini kita menggunakan beberapa option dari librari Bootstrap Datepicker antara lain :

  1. format
    Berfungsi untuk menentukan format tanggal. Defaultnya adalah : “mm/dd/yyyy”.
    Format tanggal ini merupakan kombinasi dari :
    d : Tanggal dalam angka (tanpa awalan 0) : 1, 2, 3, 4, …., 10, 11.
    dd : Tanggal dalam angka (dengan awalan 0) : 01, 02, 03, 04, …., 10, 11.
    m : Bulan dalam angka (tanpa awalan 0) : 1, 2, 3, 4, …., 10, 11.
    mm : Bulan dalam angka (dengan awalan 0) : 01, 02, 03, 04, …., 10, 11.
    M : Bulan dalam huruf (Singkatan 3 huruf awal) : Jan, Feb, Apr, May.
    MM : Bulan dalam huruf (Lengkap) : January, February, April, May.
    yy : Tahun dalam angka (2 digit) : 11, 12, 13.
    yyyy : Tahun dalam angka (4 digit) : 2011, 2012, 2013.
  2. todayHighlight
    Berfungsi untuk memberi highlight (bakcground warna) pada tanggal hari ini, Jika option ini di set true. Defaultnya adalah false.
  3. autoclose
    Berfungsi untuk menutup / menyembunyikan datepicker setelah user memilih tanggal (mengklik tanggal), Jika option ini di set true. Defaultnya adalah false.

STEP 5 – PROSES CETAK (Export Excel)
Sesuai judul dari step 5 ini, kita akan masuk ke inti dari catatan ini yakni membuat proses cetak / ekspor ke file excel. Pertama-tama buat dulu sebuah file baru dan beri nama proses.php, lalu simpan file tersebut di folder xampp/htdocs/export_phpexcel/. Berikut ini isi / skrip dari file tersebut :

<?php
// Load file koneksi.php
include "koneksi.php";

// Load plugin PHPExcel nya
require_once 'libraries/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 Transaksi")
             ->setSubject("Transaksi")
             ->setDescription("Laporan Semua Data Transaksi")
             ->setKeywords("Data Transaksi");

// Buat sebuah variabel untuk menampung pengaturan style dari header tabel
$style_col = array(
  'font' => array('bold' => true), // Set font nya jadi bold
  '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
  )
);

// 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
  )
);

if(isset($_GET['filter']) && ! empty($_GET['filter'])){ // Cek apakah user telah memilih filter
  $filter = $_GET['filter']; // Ambil data filder yang dipilih user

  if($filter == '1'){ // Jika filter nya 1 (per tanggal)
    $tgl = date('d-m-y', strtotime($_GET['tanggal']));
    $label = 'Data Transaksi Tanggal '.$tgl;

    $query = "SELECT * FROM transaksi WHERE DATE(tgl)='".$_GET['tanggal']."'"; // Tampilkan data transaksi sesuai tanggal yang diinput oleh user pada filter
  }else if($filter == '2'){ // Jika filter nya 2 (per bulan)
    $nama_bulan = array('', 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember');
    $label = 'Data Transaksi Bulan '.$nama_bulan[$_GET['bulan']].' '.$_GET['tahun'];

    $query = "SELECT * FROM transaksi WHERE MONTH(tgl)='".$_GET['bulan']."' AND YEAR(tgl)='".$_GET['tahun']."'"; // Tampilkan data transaksi sesuai bulan dan tahun yang diinput oleh user pada filter
  }else{ // Jika filter nya 3 (per tahun)
    $label = 'Data Transaksi Tahun '.$_GET['tahun'];

    $query = "SELECT * FROM transaksi WHERE YEAR(tgl)='".$_GET['tahun']."'"; // Tampilkan data transaksi sesuai tahun yang diinput oleh user pada filter
  }
}else{ // Jika user tidak memilih filter
  $label = 'Semua Data Transaksi';

  $query = "SELECT * FROM transaksi ORDER BY tgl"; // Tampilkan semua data transaksi diurutkan berdasarkan tanggal
}

$excel->setActiveSheetIndex(0);
$excel->getActiveSheet()->setCellValue('A1', "DATA TRANSAKSI"); // 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()->setCellValue('A2', $label); // Set kolom A2 sesuai dengan yang pada variabel $label
$excel->getActiveSheet()->mergeCells('A2:E2'); // Set Merge Cell pada kolom A2 sampai E2

// Buat header tabel nya pada baris ke 4
$excel->getActiveSheet()->setCellValue('A4', "Tanggal"); // Set kolom A4 dengan tulisan "Tanggal"
$excel->getActiveSheet()->setCellValue('B4', "Kode Transaksi"); // Set kolom B4 dengan tulisan "Kode Transaksi"
$excel->getActiveSheet()->setCellValue('C4', "Barang"); // Set kolom C4 dengan tulisan "Barang"
$excel->getActiveSheet()->setCellValue('D4', "Jumlah"); // Set kolom D4 dengan tulisan "Jumlah"
$excel->getActiveSheet()->setCellValue('E4', "Total Harga"); // Set kolom E4 dengan tulisan "Total Harga"

// Apply style header yang telah kita buat tadi ke masing-masing kolom header
$excel->getActiveSheet()->getStyle('A4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('B4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('C4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('D4')->applyFromArray($style_col);
$excel->getActiveSheet()->getStyle('E4')->applyFromArray($style_col);

// Set height baris ke 1, 2, 3 dan 4
$excel->getActiveSheet()->getRowDimension('1')->setRowHeight(20);
$excel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);
$excel->getActiveSheet()->getRowDimension('3')->setRowHeight(20);
$excel->getActiveSheet()->getRowDimension('4')->setRowHeight(20);

$sql = mysqli_query($connect, $query); // Eksekusi/Jalankan query dari variabel $query
$no = 1; // Untuk penomoran tabel, di awal set dengan 1
$numrow = 5; // Set baris pertama untuk isi tabel adalah baris ke 5

while($data = mysqli_fetch_array($sql)){ // Ambil semua data dari hasil eksekusi $sql
  $tgl = date('d-m-Y', strtotime($data['tgl'])); // Ubah format tanggal jadi dd-mm-yyyy

  $excel->getActiveSheet()->setCellValue('A'.$numrow, $tgl);
  $excel->getActiveSheet()->setCellValue('B'.$numrow, $data['kode']);
  $excel->getActiveSheet()->setCellValue('C'.$numrow, $data['barang']);
  $excel->getActiveSheet()->setCellValue('D'.$numrow, $data['jumlah']);
  $excel->getActiveSheet()->setCellValue('E'.$numrow, $data['total_harga']);

  // 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);

  $excel->getActiveSheet()->getRowDimension($numrow)->setRowHeight(20);

  $no++; // Tambah 1 setiap kali looping
  $numrow++; // Tambah 1 setiap kali looping
}

// Set width kolom
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(15); // Set width kolom A
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(18); // 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(20); // Set width kolom E

// Set orientasi kertas jadi LANDSCAPE
$excel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);

// Set judul file excel nya
$excel->getActiveSheet()->setTitle("Laporan Data Transaksi");
$excel->getActiveSheet();

// Proses file excel
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="Data Transaksi.xlsx"'); // Set nama file excel nya
header('Cache-Control: max-age=0');

$write = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$write->save('php://output');
?>

Saya akan menjelaskan sedikit mengenai kode diatas karena sebagian besar sudah saya jelaskan di setiap baris skrip diatas dengan komentar.

$excel->getActiveSheet()->setCellValue(‘A1’, “DATA TRANSAKSI”);
Seperti yang sudah saya jelaskan lewat komentar, skrip diatas berfungsi untuk menset kolom A1 dengan tulisan DATA SISWA. Mungkin ada yang bingung maksud dari A1 disini apa? lihat gambar berikut ini :

Set Value - Cara Membuat Export Excel Plus Filter Tanggal dengan PHPExcel

Yang saya beri tanda panah itulah yang dimaksud dengan kolom A1. Saya harap Anda paham maksud saya.

$excel->getActiveSheet()->mergeCells(‘A1:E1’);`
Fungsi dari skrip diatas adalah untuk membuat “Merge Cells”. Dan arti dari ‘A1:E1’ itu adalah buat merge kolom dari kolom A1 sampai dengan kolom E1. Untuk lebih jelasnya lihat gambar dibawah :

Merge Cells - Cara Membuat Export Excel Plus Filter Tanggal dengan PHPExcel

Setelah di merge akan menghasilkan seperti gambar berikut :

After Merge Cells - Cara Membuat Export Excel Plus Filter Tanggal dengan PHPExcel

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.



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
Untuk mengunduh source code nya, klik salah satu link dibawah ini.
– Download versi MySQLi dengan Bootstrap 3 (Link download yang sesuai tutorial ini)
– Download versi MySQLi dengan Bootstrap 4
– Download versi MySQLi tanpa Bootstrap
– Download versi PDO dengan Bootstrap 3
– Download versi PDO dengan Bootstrap 4
– Download versi PDO tanpa Bootstrap


SUMBER & REFERENSI
Dokumentasi Bootstrap Datepicker : https://bootstrap-datepicker.readthedocs.io
Dokumentasi PHPExcel : Download
Cara mudah membuat export excel plus filter tanggal bulan tahun dengan php, phpexcel dan mysql, tutorial lengkap membuat export excel dengan filter tanggal bulan tahun menggunakan php, phpexcel dan mysql, export excel plus filter per tanggal per bulan atau per tahun dengan php, phpexcel dan mysql

PHPExcel

(Total : 6,204 viewers, 1 viewers today)
export-excel-filter-tanggal-phpexcel

ABOUT THE AUTHOR

Interested in android programming, long time focused on web development. Visit My Profile Site at www.rizaldimaulidia.com

POST YOUR COMMENTS

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

Name *

Email *

Website

8 Comments

  1. Suryadinata

    Kalau utk filter berdasarkan barang gmn ya mas, sy coba dng cara yg sama diatas ga bisa….
    terima kasih.

    • Harusnya secara alur sama pa. Itu kan intinya nanti kita akan kirim Kode Barang nya dengan metode GET. yang akan dikirim via URL. Jadi ketika bapa klik tombol filter, seharusnya di url nya nanti muncul Kode Barang yg bapa ketik pada inputan filternya

    • Harusnya secara alur sama pa. Itu kan intinya nanti kita akan kirim Kode Barang nya dengan metode GET. yang akan dikirim via URL. Jadi ketika bapa klik tombol filter, seharusnya di url nya nanti muncul Kode Barang yg bapa ketik pada inputan filternya

  2. Ragil Dar

    mau nanya mas, klo hasil export excelnya kosong itu salah dimana ya mas? udah sya ikutin sesuai contoh

  3. gudangrep

    tutorial yang bagus dan bermanfaat
    mau tanya, bagaimana jika di tambahkan dengan pagination? jadi jika pada saat load datannya banyak akan terlihat lebih efisien.\
    terima kasih.

NOTE ARCHIVES