Monday, November 22, 2010

Mengekspor Data ke File Excel Dengan PHP

Di dalam suatu program terutama yang berhubungan dengan keuangan, sepertinya belum "apdol" kalau tidak dilengkapi fasilitas untuk mengekspor data ke media lain, seperti CSV, Excel, XML atau media lainnya.

Disini saya akan membahas bagaimana caranya mengekspor data dari aplikasi kita ke format file binary Excel. Saya sebut binary karena output file dari program yang akan saya bahas benar-benar file asli Excel (bukan XML atau CSV).



Library yang akan digunakan diambil dari salah satu extension PEAR, yaitu PEAR/Spreadsheet/Excel/Writer.php. yup lagi-lagi PEAR, jika rekan-rekan semua mengexplore lebih jauh PEAR, akan banyak sekali class-class yang menarik untuk dipelajari.

Ada 3 class yang digunakan pada library ini, yaitu :
  1. Workbook
    Merupakan class yang merepresentasikan file excel yang sedang dibuat
  2. Worksheet
    Merupakan class yang dimanipulasi di dalam class workbook. Workbook bisa memiliki banyak worksheet, jumlah worksheet dibatasi oleh kapasitas memory. dan dalam satu worksheet ada baris dan kolom yang masing-masing ada batas maksimumnya tergantung versi readernya. Readernya dalam hal ini bisa berupa Ms.Excel atau pun Open Office - Math.
  3. Format
    Merupakan class yang digunakan sebagai "style" setiap cell (titik temu baris dan kolom). Didalam Ms.Excel ada menubar "Format", nah dari situ kita bisa tau kemampuan apa saja yang bisa dilakukan class ini, hampir semua format yang ada pada Ms.Excel bisa didefinisikan pada class ini.
Ok, sekian dulu penjelasan dasar dari PEAR::SpreadSheet, sekarang mari kita mencobanya :)

Pertama, buat file PHP baru dengan nama misalnya exporttoexcel.php lalu masukan listing kode di bawah ini :

<?
 require_once 'Spreadsheet/Excel/Writer.php';
 
 // Membuat workbook baru
 $workbook = new Spreadsheet_Excel_Writer();
 
 // Membuat format cell header kolom / huruf tebal + background color
 $cellHeaderFormat =& $workbook->addFormat();
 $cellHeaderFormat->setPattern(2); // pola background
 $cellHeaderFormat->setAlign('center'); // rata tengah horizontal
 $cellHeaderFormat->setVAlign('vcenter'); // rata tengah vertikal
 $cellHeaderFormat->setSize('9');  // ukuran font
 $cellHeaderFormat->setBgColor(5); // setting warna background
 $cellHeaderFormat->setFgColor(1); // setting warna huruf
 $cellHeaderFormat->setBold();
 
 // Membuat format cell string
 $cellStringFormat =& $workbook->addFormat();
 $cellStringFormat->setAlign('left'); // rata kiri horizontal
 $cellStringFormat->setVAlign('vcenter'); // rata tengah vertikal
 $cellStringFormat->setSize('9');  // ukuran font
 
 // Membuat format cell Currency/Float
 $cellCurrencyFormat =& $workbook->addFormat();
 $cellCurrencyFormat->setAlign('right');
 $cellCurrencyFormat->setVAlign('vcenter');
 $cellCurrencyFormat->setSize('9');
 $cellCurrencyFormat->setNumFormat(4); // setting untuk format currency
 
 // Membuat format cell nomor Integer
 $cellIntFormat =& $workbook->addFormat();
 $cellIntFormat->setAlign('right');
 $cellIntFormat->setVAlign('vcenter');
 $cellIntFormat->setSize('9');
 $cellIntFormat->setNumFormat(1); // setting untuk format integer
 
 
 // menambahkan objek worksheet baru pada workbook
 $worksheet =& $workbook->addWorksheet();
 
 // setting lebar kolom 1 sampai 4
 $worksheet->setColumn(0, 0, 30);
 $worksheet->setColumn(1, 1, 10);
 $worksheet->setColumn(2, 2, 20);
 $worksheet->setColumn(3, 3, 20);
 // membuat kolom tabel
 $worksheet->writeRow(0, 0, array("Nama Barang", "Jumlah", "Harga", "Subtotal"), $cellHeaderFormat);
 
 // membuat data tabel
 // data baris 1
 $worksheet->write(1, 0, "Buku Tulis", $cellStringFormat); 
 $worksheet->write(1, 1, 15, $cellIntFormat);
 $worksheet->write(1, 2, 2500, $cellCurrencyFormat);
 $worksheet->writeFormula(1, 3, "=B2*C2", $cellCurrencyFormat);
 // data baris 2
 $worksheet->write(2, 0, "Penggaris", $cellStringFormat); 
 $worksheet->write(2, 1, 5, $cellIntFormat);
 $worksheet->write(2, 2, 1000, $cellCurrencyFormat);
 $worksheet->writeFormula(2, 3, "=B3*C3", $cellCurrencyFormat);
 // data baris 3
 $worksheet->write(3, 0, "Ballpoint", $cellStringFormat); 
 $worksheet->write(3, 1, 20, $cellIntFormat);
 $worksheet->write(3, 2, 1500, $cellCurrencyFormat);
 $worksheet->writeFormula(3, 3, "=B4*C4", $cellCurrencyFormat);
 // total
 $worksheet->write(4, 2, "Total", $cellHeaderFormat); 
 $worksheet->writeFormula(4, 3, "=SUM(D2,D4)", $cellCurrencyFormat);
  
 // mengirim header file xls dengan nama hasil.xls ke browser
 $workbook->send('hasil.xls');

 // mwnghapus workbook dari memory
 $workbook->close();
?>


Jika program diatas dijalankan, maka akan mengembalikan header http berupa file xls ke browser untuk diview atau didownload seperti screencapture dibawah ini :


Cukup simple bukan?

Untuk info selengkapnya mengenai method-method yang digunakan pada PEAR::SpreadSheet bisa dibaca dokumentasinya di http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.php

Silakan tulis pada komentar jika ada yang ingin ditanyakan seputar artikel saya di atas.

Selamat mencoba :)

3 comments:

  1. Puyeng bro codenya
    tapi bagus juga buat referensi
    keep posting!

    ReplyDelete
  2. nice code, I'll try this one ^^

    ReplyDelete
  3. Bagus sich tapi saya buat file excelnya tidak pake pear,.. pake coding biasa saja,..

    ReplyDelete