Membuat Diagram / Chart menggunakan PHPExcel

postphpphpexcelchart

Pernah berpikir untuk membuat sebuah laporan yang berisi data dan memerlukan diagram / chart untuk menggambarkan perbandingan data dalam bentuk file Excel menggunakan PHPExcel?

Ya, kurang lebih seperti itu yang saya coba kerjakan saat ini. Membuat sebuah laporan yang berisi total pengerjaan data tiket servis per staff IT dan membuat diagram yang dapat menggambarkan persentase pengerjaan menggunakan PHPExcel.

Pengenalan PHPExcel

Oh ya, mungkin beberapa teman teman ada yang belum mengetahui PHPExcel ini. PHPExcel adalah sebuah class gratis yang dapat digunakan untuk melakukan convert data dari bahasa pemrograman PHP menjadi file Excel. PHPExcel ini dapat di download langsung di halaman Github nya : PHPExcel Github Page

Jika teman teman sudah berhasil mendownload PHPExcel ini, didalamnya sudah terdapat berbagai contoh penggunaan untuk membuat sebuah diagram / chart bersamaan dengan download file PHPExcel pada folder Examples. Jika belum ya silahkan download. 😀

Latar Belakang

Nah, jadi masalahnya dimana? Bagi yang baru saja mengenal class ini terutama untuk membuat chart (seperti saya) mungkin akan agak sedikit kesulitan memahami cara kerjanya. Akhirnya setelah saya coba sana sini dan akhirnya berhasil setelah beberapa jam mencoba dengan asal. Tulisan ini juga sebenarnya sebagai pengingat untuk saya sendiri atau pun untuk teman teman yang mengalami kesulitan dalam memahami class ini.

Dalam tutorial kali ini saya akan menggunakan contoh diagram pie yang sudah ada di dalam file contoh dari PHPExcel yang teman teman bisa download di link yang sudah saya berikan tadi.


1. Inisialisasi

Apa maksudnya inisialisasi? Intinya adalah melakukan include data class PHPExcel agar dapat digunakan pada file PHP lain. Kemudian memanggil fungsinya agar fungsi yang ada di class PHPExcel dapat kita gunakan.

Berikut adalah inisialisasi PHPExcel :

$objPHPExcel = new PHPExcel();
$objWorksheet = $objPHPExcel->getActiveSheet();


2. Data untuk diagram

Selanjutnya setelah melakukan inisialisasi class, kita siapkan data untuk diagramnya. Jika mengikuti file contoh anda dapat melihat isian data sebagai berikut :

$objWorksheet->fromArray(
  array(
    array('', 2010, 2011, 2012),
    array('Q1', 12, 15, 21),
    array('Q2', 56, 73, 86),
    array('Q3', 52, 61, 69),
    array('Q4', 30, 32, 0),
  )
);

Namun data tersebut bersifat statis dan anda harus mengubah kode untuk dapat mengubah isinya. Data diatas sebenarnya tidak diharuskan ada dan teman teman bisa menggunakan data PHP yang sudah berbentuk data array untuk data diagram ini.

Berikut adalah contoh gambar mengenai data PHP milik saya yang sudah di tempatkan langung ke dalam file excel export :

phpexcelchartdata

Asumsi teman teman sudah memiliki data ini dan sudah di letakkan isinya ke dalam file excel seperti contoh diatas. maka langkah selanjutnya adalah …


3. Set Label Data Series

Melakukan set label dari setiap data series yang akan dibuatkan diagramnya. Maksud dari label diagram adalah sebagai informasi ketika mouse kita hover ke angka yang ada di dalam diagram. Data ini bersifat statis dan harus di set menggunakan fungsi :

$dataSeriesLabels1 = array(
    new PHPExcel_Chart_DataSeriesValues(
        'String',
        'Worksheet!$D$7',
        NULL,
        1),
);

Penjelasan :

  1. $dataSeriesLabels1 : nama variabel untuk menyimpan data label.
  2. Parameter 1 : Datatype dari data yang akan di buatkan label. Standar adalah ‘String’.
  3. Parameter 2 : Referensi Cell Data yang akan diambil isinya sebagai data label. Sesuaikan nama worksheet dan Posisi Cell nya. Contoh diatas adalah D7.
  4. Parameter 3 : Kode format. Standar kosong / NULL.
  5. Parameter 4 : Jumlah data series berdasarkan Referensi Cell Data.

Pada dokumentasi sebenarnya ada parameter 5 dan 6, namun jarang digunakan. (terutama bagi saya)

Catatan :

  • Nama variabel dapat anda ubah sesuai keinginan. Tidak harus sama $dataSeriesLabels1. Nantinya nama ini akan di gunakan pada fungsi selanjutnya.
  • Pada parameter 2, teman teman bisa melihat adanya tulisan ‘Worksheet’ kan? Nama ini merupakan nama dari worksheet dari data excel yang akan kita generate.
    Jika teman teman sudah mengubah nama standar worksheet, maka pada parameter 2 nama di bagian depan harus di samakan dengan nama worksheet anda. Pada contoh yang saya kerjakan, nama worksheet nya menjadi Laporan_Penyelesaian_Tiket!$D$7

Hasil akhir nantinya :

phpexcelchartresultlabeled

Setelah data series label di set, maka langkah selanjutnya adalah melakukan set terhadap …


4. Set Label Sumbu X

Apa sih maksudnya Set label sumbu X? Pernah belajar mengenai koordinat X dan Y kan? Sumbu X itu adalah data yang posisinya vertikal / berdiri. Pada contoh ini adalah data Nama. Lanjut aja ke fungsi :

$xAxisTickValues1 = array(
    new PHPExcel_Chart_DataSeriesValues(
        'String',
        'Worksheet!$C$8:$C$10',
        NULL,
        3)
);

Penjelasan :

  1. $xAxisTickValues1 : nama variabel untuk menyimpan data sumbu x.
  2. Parameter 1 : Datatype dari data yang akan di buatkan label. Standar adalah ‘String’.
  3. Parameter 2 : Referensi Cell Data yang akan diambil isinya sebagai data label sumbu X. Sesuaikan nama worksheet dan Posisi Cell nya. Contoh diatas adalah C8 sampai C10.
  4. Parameter 3 : Kode format. Standar kosong / NULL.
  5. Parameter 4 : Jumlah data series berdasarkan Referensi Cell Data.

Pada dokumentasi sebenarnya ada parameter 5 dan 6, namun jarang digunakan.

Catatan :

  • Nama variabel dapat anda ubah sesuai keinginan anda masing masing. Tidak harus sama $xAxisTickValues1. Nantinya nama ini akan di gunakan pada fungsi selanjutnya.
  • Pada parameter 2, sama seperti fungsi sebelumnya, nama ini merupakan nama dari worksheet dari data excel yang akan kita generate.
    Jika teman teman sudah mengubah nama standar worksheet, maka pada parameter 2 nama di bagian depan harus di samakan dengan nama worksheet anda.
    Pada contoh yang saya kerjakan, nama worksheet nya menjadi Laporan_Penyelesaian_Tiket!$C$8$C$10
  • Jika teman teman menggunakan data dinamis (dapat berubah) untuk membuat laporan, maka teman teman sebaiknya mengubah parameter 2 sesuai dengan data tersebut dengan manipulasi via PHP loop atau foreach. Sama hal nya juga untuk parameter 4 yang merupakan total dari data dinamis tersebut. Teman teman dapat menggunakan count data dan menempatkannya di parameter 4.

Setelah label sumbu x di set, maka langkah selanjutnya adalah melakukan set terhadap …

 


5. Set Nilai Data (Data Values) dari setiap series

Maksudnya adalah melakukan penetapan nilai data dari sumbu X yang sebelumnya telah kita tetapkan. Berikut fungsinya :

$dataSeriesValues1 = array(
    new PHPExcel_Chart_DataSeriesValues(
        'Number',
        'Worksheet!$D$8:$D$10',
        NULL,
        3),
);

Penjelasan :

  1. $dataSeriesValues1: nama variabel untuk menyimpan data nilai.
  2. Parameter 1 : Datatype dari data yang akan di buatkan label. Standar adalah ‘Number’ karena angka inilah yang nantinya akan di jadikan sebagai diagram.
  3. Parameter 2 : Referensi Cell Data yang akan diambil isinya sebagai data label nilai. Sesuaikan nama worksheet dan Posisi Cell nya. Contoh diatas adalah D8 sampai D10.
  4. Parameter 3 : Kode format. Standar kosong / NULL.
  5. Parameter 4 : Jumlah data series berdasarkan Referensi Cell Data.

Pada dokumentasi sebenarnya ada parameter 5 dan 6, namun jarang digunakan.

Catatan :

  • Nama variabel dapat anda ubah sesuai keinginan. Tidak harus sama $dataSeriesValues1. Nantinya nama ini akan di gunakan pada fungsi selanjutnya.
  • Pada parameter 2, sama seperti fungsi sebelumnya, nama ini merupakan nama dari worksheet dari data excel yang akan kita generate.
    Jika teman teman sudah mengubah nama standar worksheet, maka pada parameter 2 nama di bagian depan harus di samakan dengan nama worksheet anda. Pada contoh yang saya kerjakan, namanya menjadi Laporan_Penyelesaian_Tiket!$D$8$D$10
  • Jika teman teman menggunakan data dinamis (dapat berubah) untuk membuat laporan, maka teman teman sebaiknya mengubah parameter 2 sesuai dengan data tersebut dengan manipulasi via PHP loop atau foreach. Sama hal nya juga untuk parameter 4 yang merupakan total dari data dinamis tersebut. Teman teman dapat menggunakan count data dan menempatkannya di parameter 4.

Setelah label sumbu x di set, maka langkah selanjutnya adalah melakukan set terhadap …


6. Pembuatan Data Series

Maksudnya apa? Semua data yang sebelumnya kita tetapkan akan disatukan ke dalam satu fungsi dan membentuk sebuah data series (seri data) yang nantinya akan dikirimkan untuk membuat diagram sesuai dengan yang kita inginkan. Berikut adalah settingnya :

$series1 = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_PIECHART, // Tipe Chart
    NULL, // Grouping (Pie charts tidak ada grouping)
    range(0, count($dataSeriesValues1)-1), // Urutan Chart
    $dataSeriesLabels1,	// Data Label
    $xAxisTickValues1,	// Data Sumbu X
    $dataSeriesValues1	// Nilai Data
);

Penjelasan :

  1. $series1: nama variabel untuk menyimpan data diagram.
  2. Parameter 1 : Menentukan jenis diagram / chart.
  3. Parameter 2 : Gruping data diagram / chart.
  4. Parameter 3 : Urutan data diagram / chart.
  5. Parameter 4 : Data label (lihat nomor 3).
  6. Parameter 5 : Data Sumbu X (lihat nomor 4).
  7. Parameter 6 : Nilai Data diagram / chart (lihat nomor 5).

Setelah data series dibangun dan di satukan dari semua fungsi sebelumnya (3 sampai 5). Maka langkah selanjutnya adalah …


7. Membuat Chart / Diagram!

Setelah banyak langkah untuk pengaturan sana sini, akhirnya kita sampai pada tahapan akhir yaitu proses pembuatan chart nya.

Berikut adalah kodenya :

// Pengaturan tampilan objek (layout) untuk diagram Pie.
$layout1 = new PHPExcel_Chart_Layout();
$layout1->setShowVal(TRUE);
$layout1->setShowPercent(TRUE);

// Masukkan seri data dalam area plot.
// Area plot akan mengambil data layout dan di gabung dengan data seri
// yang sebelumnya sudah di tentukan.
$plotArea1 = new PHPExcel_Chart_PlotArea(
    $layout1,
    array($series1)
);

// Tentukan legend chart
$legend1 = new PHPExcel_Chart_Legend(
    PHPExcel_Chart_Legend::POSITION_RIGHT,
    NULL,
    false
);

// Tentukan judul chart
$title1 = new PHPExcel_Chart_Title('Statistik Penyelesaian Tiket Per User');

// Pembuatan chart
$chart1 = new PHPExcel_Chart(
    'nama-chartnya', // Nama chart
    $title1,    // Judul chart
    $legend1,   // Legend chart
    $plotArea1, // Area plot
    true, // plotVisibleOnly
    0,    // displayBlanksAs
    NULL, // Label sumbu X
    NULL  // Label sumbu Y - Diagram pie tidak ada sumbu Y
);

// Set posisi titik kiri atas dan kanan bawah chart
// Fungsinya untuk menentukan lokasi dibuatnya chart
$chart1->setTopLeftPosition('F4');
$chart1->setBottomRightPosition('M20');

// Tambahkan chart ke dalam Worksheet
$objWorksheet->addChart($chart1);

Di dalam kode diatas sudah disertakan juga keterangan. Secara umum berikut adalah urutannya :

  1. Melakukan pengaturan tampilan diagram pie. Ada 2 poin yang di set TRUE yaitu setShowVal() dan setShowPercent(). Nantinya pada chart akan ditampilkan nilai tiap data dan juga persentase nya.
  2. Melakukan plotting area chart dengan cara menyatukan pengaturan tampilan diagram pie (pengaturan diatas) dengan data series yang sebelumnya kita telah buat (pada langkah 3-6)
  3. Menentukan Legend / Info Data chart. Bisa dilihat Legend akan di tampilkan pada bagian kanan chart.
  4. Menentukan judul chart
  5. Melakukan pengaturan chart yang akan dibangun dengan menggabungkan semua data yang telah di buat.
  6. Menentukan posisi chart nantinya akan di buat.
  7. Tambahkan chart ke workbook sesuai dengan pengaturan.

Setelah semua selesai bagaimana? Baiklaaaah, langkah selanjutnya adalah …


8. Proses Download File Excel

Berdasarkan contoh yang di sediakan oleh PHPExcel pada file nya, ketika kita melakukan akses ke filenya, maka file excel akan secara otomatis tersimpan ke dalam folder yang sama dengan folder file php PHPExcel dan juga dengan nama yang sama dengan nama file php PHPExcel.

Tapi bagaimana kalau kita mau supaya ketika akses file akan langsung di download seperti halnya download biasa? Caranya ternyata sederhana.

Berikut adalah kode yang saya gunakan :

// Tentukan index sheet aktif ke sheet paling awal
// supaya ketika file di buka, maka sheet ini yang
// akan di tampilkan pertama kali. (opsional)
$objPHPExcel->setActiveSheetIndex(0);

// Bersihkan kode dari output buffer untuk menghindari
// pesan error yang dapat mencegah proses download.
ob_clean();

// Redirect output to a client’s web browser (Excel2007)
// Redirect hasil output ke web browser (Excel 2007)
// Anda dapat mengubah nama file yang akan di download
// pada bagian filename:
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Laporan '.date('d/m/Y').'.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->setIncludeCharts(TRUE);
$objWriter->save('php://output');
exit;

Letakkan semua kode tersebut pada bagian bawah kode. Nantinya file excel akan di download seperti halnya kita mendownload file atau aplikasi lainnya.


Hasil akhir :

phpexcelchartallresult

Penjelasan :

  1. Label Data Series adalah data pada Cell D7
  2. Label Sumbu X adalah data pada Cell C8 sampai dengan C10
  3. Nilai Data Series adalah data pada Cell D8 sampai dengan D10
  4. Pada chart, bagian atas adalah judul chart
  5. Pada chart, bagian kiri adalah Legend chart
  6. Pada chart, di setiap potongan pie ada jumlah data dan persentase data
  7. Pada chart, jika mouse di hover ke arah salah satu data chart akan muncul info label data series
  8. Pada chart, posisi titik kiri atas adalah F4 dan kanan bawah adalah M20

Semua penjelasan diatas menjelaskan bahwa semua pengaturan yang kita atur tadi sudah benar dan sudah berhasil diubah menjadi sebuah diagram.

 


Kesimpulan

Setelah semua itu berhasil maka kita akan mendapatkan hasil sesuai dengan setting yang telah kita buat.

Ingat, semua setting ini di letakkan dalam satu file. Untuk mendownload nya anda harus melakukan akses ke file tersebut via browser.

Sebenarnya akan lebih baik lagi jika saya sediakan file source code untuk tutorial ini. Namun saat ini baru tutorialnya saja yang saya sediakan.

Silahkan untuk tinggalkan komentar jika memang teman teman perlu adanya source code yang dapat digunakan (selain contoh dari PHPExcel langsung). Nantinya jika dirasa penting akan saya coba update kembali artikel ini.

Tidak lupa pula apabila ada pertanyaan mengenai artikel ini, teman teman bisa langsung menghubungi saya via email dari halaman Tentang. Terima kasih atas kunjungannya dan selamat belajar. 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s