Senin, 09 April 2012

[Contoh 2 & 3] Membuat Laporan Export Data Dari MySQL ke Excel terencoding dengan PHP (no-pear)

[Contoh 2] Membuat Laporan Export Data dari MySQL ke Excel terencoding dengan PHP (no-pear)

http://bimosaurus.com/2012/04/09/contoh-2-membuat-laporan-export-data-dari-mysql-ke-excel-terencoding-dengan-php-no-pear/


Jika dalam posting lalu http://bimosaurus.com/2012/04/09/contoh-1-membuat-laporan-export-data-dari-mysql-ke-excel-dengan-php-no-pear/ kita sudah belajar menggunakan php untuk melakukan export ke dalam file excel yang datanya diambil dari database, namun ternyata proses yang kita pelajari tersebut masih terdapat kekurangan. Kekurangannya yaitu bahwa data excel yang dihasilkan tidak terencoding dengan baik sebagaimana layaknya file excel. Excel yang dihasilkan hanyalah file text dalam bentuk table, yang disimpan sebagai xls atau excel spreadsheet. Untuk membuat exporting data dalam bentu excel yang sebenarnya maka perlu tools yang berfungsi mengolah encoding data cell dan column ke dalam excel encoding. Dalam PHP-PEAR, fasilitas ini jelas telah ada. Tutorial penggunaan PEAR menyusul. Kali ini kita akan belajar menggunakan fasilitas : php_writeexcel-0.3.0.tar.gz yang telah saya siapkan di http://bimosaurus.com/files/php_writeexcel-0.3.0.tar.gz.

Extractlah file tersebut ke dalam direktori yang anda suka. Kalau saya lebih suka memasukkan segala fasilitas ini ke dalam direktori libs. Sehingga akan terbentuk libs/php_writeexcel-0.3.0 . Untuk contoh scripting menggunaan php_writeexcel ini dasarnya adalah sebagai berikut :

 

 

 
require_once "libs/php_writeexcel-0.3.0/class.writeexcel_workbook.inc.php";
require_once "libs/php_writeexcel-0.3.0/class.writeexcel_worksheet.inc.php";
 
$fname = tempnam("/tmp", "namafile.xls"); //membuka sebuah file baru diletakkan dalam /tmp
$workbook = &new writeexcel_workbook($fname); //workbook diberinama
$worksheet = &$workbook->addworksheet(); //nambah worksheet
 
//tulis
 
$worksheet->write(0, 0, "JUDUL diletakkan di kolom 1");
$worksheet->write(2, 0, "title baris 3 kolom 1");
$worksheet->write(2, 1, "title baris 3 kolom 2");
$i = 3;
while($i <= 10){
$kol = $i+1; // karena nomer kolom pertama adalah 0, maka $kol adalah 0+1
$worksheet->write($i,0,"Ini Baris $kol Kolom ke 1");
$worksheet->write($i,1,"Ini Baris $kol Kolom ke 2");
$i++;
}
 
 
$workbook->close();
 
header("Content-Type: application/x-msexcel; name=\"namafile.xls\"");
header("Content-Disposition: inline; filename=\"namafile.xls\"");
$fh=fopen($fname, "rb"); //membuka file namafile.xls , membacanya dan siap untuk mengolah dalam bentuk biner
fpassthru($fh); //menuangkan data yang ada di buffer
unlink($fname); //setelah terdownload, hapus file

Contoh data ini dapat dilihat di http://bimosaurus.com/demo/export1.php. Untuk posting selanjutnya akan dicoba menuangkan data MySQL ke bentuk XLS MS Excel.

Semoga Berguna





[Contoh 3] Membuat Laporan Export Data dari MySQL ke Excel terencoding dengan PHP (no-pear)

http://bimosaurus.com/2012/04/09/contoh-3-membuat-laporan-export-data-dari-mysql-ke-excel-terencoding-dengan-php-no-pear/


Posting lalu, http://bimosaurus.com/2012/04/09/contoh-1-membuat-laporan-export-data-dari-mysql-ke-excel-dengan-php-no-pear/ telah ditunjukkan bagaimana caranya membuat sebuah laporan Excel dengan menggunakan php_writeexcel. Kali ini akan dilanjutkan dengan bagaimana menuangkan data dari MySQL database ke dalam file berformat XLS atau spreadsheet. Berikut sebuah contoh, misal kita memiliki sebuah tabel sebagai berikut, bernama tabel pegawai dalam sebuah database.

nip nama honor status_ambil
10001 Susanto Rp. 1000000 Belum
10002 Susanti Rp. 1000000 Sudah
10003 Marwoto Rp. 2000000 Sudah
10004 Gunadi Rp. 1500000 Belum
10005 Nur Eko Rp. 1000000 Belum

Tabel dalam database MySQL tersebut akan kita tuangkan dalam sebuah file Excel dengan nama : laporan-tanggal-dd-mm-yy.xls.
Maka kita akan membuat sebuah script seperti berikut:

require_once "libs/php_writeexcel-0.3.0/class.writeexcel_workbook.inc.php";
require_once "libs/php_writeexcel-0.3.0/class.writeexcel_worksheet.inc.php";
 
if(mysql_connect( "localhost","user","pass" )){
mysql_select_db( "kepegawaian" );
}
 
 
$date = date('Y-m-d');
$fname = tempnam("/tmp", "laporan-tanggal-$date.xls"); //membuka sebuah file baru diletakkan dalam /tmp
$workbook = &new writeexcel_workbook($fname); //workbook diberinama
$worksheet = &$workbook->addworksheet(); //nambah worksheet
 
//tulis blok titel tabel
 
$worksheet->write(0, 0, "Data Pegawai PT anu");
$worksheet->write(2, 0, "NIP");
$worksheet->write(2, 1, "Nama");
$worksheet->write(2, 2, "Honor");
$worksheet->write(2, 3, "Status Ambil");
//title selesai
 
//mari query
$sql = "SELECT * FROM `pegawai`";
$q = mysql_query( $sql );
$i = 3; //ingat bahwa kolom sebenarnya adalah nilai i ditambah 1, karena dimulai dengan nol
while( $r = mysql_fetch_array( $q ) ){
$worksheet->write($i,0,$r['nip']);
$worksheet->write($i,1,$r['nama']);
$worksheet->write($i,2,$r['honor']);
$worksheet->write($i,3,$r['status_ambil']);
$i++;
}
$workbook->close(); //selesai tulis
 
//tuang data
header("Content-Type: application/x-msexcel; name=\"laporan-tanggal-$date.xls\"");
header("Content-Disposition: inline; filename=\"laporan-tanggal-$date.xls\"");
$fh=fopen($fname, "rb"); //membuka file namafile.xls , membacanya dan siap untuk mengolah dalam bentuk biner
fpassthru($fh); //menuangkan data yang ada di buffer
unlink($fname); //setelah terdownload, hapus file

Hasilnya kira-kira dapat diambil disini : http://bimosaurus.com/demo/export2.php. Format ini adalah setara dengan MS-Excel 2000/XP.
Posting selanjutnya adalah bagaimana memasukkan data dari XLS/Excel ke dalam database MySQL.. Tunggu posting tersebut
Semoga berguna.


18 komentar:

  1. kiye sapa jah, malah spam mlebu mrene? Dasar wong Turki

    BalasHapus
  2. Gek ndang di prospek, sopo ngerti wonge njaluk digawekke aplikasi rental mobil.

    BalasHapus
  3. hahahaha, siap mas, mbokan entuk proyek nang Turki, bisa melihat bekas Turki Utsmani...

    BalasHapus
  4. Mas, sampeyan ngerti PRADO PHP Framework?
    Golek tutoriale kok minim banget ya, sepertinya powerful.

    BalasHapus
  5. Yen Prado PHP saya belum ngerti mas , cuma pernah dengar namanya dan pernah tanpa tau saya download cuma sekedar saya kumpulkan di resources-folder saya. Tentang kemampuan dan efektifitasnya seperti apa, coba deh mas saya coba baca-baca.
    Kalau framework ya yang saya belajar palign baru CodeIgniter, Yii, dan CakePHP.

    BalasHapus
  6. Ini juga masih tahap eksplorasi, mas.
    Minggu kemarin kami lakukan benchmarking beberapa framework, diantaranya: Prado PHP, CakePHP, CI, dan ZOOP.

    Kriteria benchmarking:
    1. Speed processing.
    2. Kemampuan integrasi (misalnya dg EXT JS)
    3. Code Editor yg biasa dipakai.
    4. Kemudahan dipelajari (curve learning).
    5. RAD (Rapid Application Development)
    6. Kemudahan porting.
    7. Compatible dengan W3C Standard.
    8. Siapa saja yg sudah pake. Terutama untuk perusahaan kelas kakap.

    Hasil kesimpulan sementara Prado PHP lebih unggul dibandingkan lainnya.

    BalasHapus
  7. Wow... keren ini mas.. Saya malau belum pernah melakukan benchmarking seperti itu. Memang beberapa sumber di web sering membandingkan antara CI, CakePHP, Zend, dan Kohana. Belakangan ini muncul Yii dan DooPHP. Ada lagi pengembangan baru yaitu Kumbia. Konon menurut beberapa sumber tersebut, diantara mereka itu yang termasuk paling ringan adalah DooPHP dan Yii disusul dengan CI. Hanya saja mereka itu memang seperti sedan yang jalan dijalan tidak terlalu lebar, dia akan menang dibanding dengan truk. Sedangkan untuk CakePHP dianggap seperti truk yang jalan dengan beban besar, yang jelas jika di jalan sempit akan kalah degan CI namun dia akan menang di jalan besar dengan beban yang sama besar.

    Terimakasih mas masukannya, coba deh saya nyoba-nyoba Prado PHP...

    BalasHapus
  8. Ada gak PHP meng-upload gambar otomatis kaya di album FB skrg, tapi disuntikkan untuk MP (pake pengembangan application itu).. :(
    aku suka kesusahan kalo upload foto padahal ampe puluhan gitu. Apalagi pake ngasih keterangan satu2

    BalasHapus
  9. proses secara SERVER SIDE nya tetep sama. PHP-Upload. Hanya saja itu dikombinasi dengan : JQuery dan Ajax... piye? Berminat???

    *eh facebook iso rotating nggak? ketoke ra iso ya?

    BalasHapus
  10. yang jelas aku pengen kaya AutoUploader-nya Multiply...
    tapi ga usah pake daftar2 adobe :(

    facebook, rotating kayanya gak bisa tuh.. MP aja yg ada..
    embuh sih, aku lupa..hahaa..

    BalasHapus
  11. lha piyee.. jal dek , usul nang petinggi ngultiply, mengko wani piro ngono wae

    BalasHapus
  12. hhahaaa
    ini aku lagi trial-trial jew..

    kan ada 3 cara upload : html, autouploader, email.
    gatau nek html nanti cucok..

    soalnya gak suka pake adobe, harus punya account. sedangkan aku kayanya pernah daftar email. tapi gatau email yg mana :)) jadi males forgot email, emailnya aja aku lupa ='=v

    BalasHapus
  13. ketoke ya enak HTML... cuma ya kui ngomong karo bos e multiply, ditawakke cara baru hahahaha... nek kaya fb kae kan dia HTML bisa jane, kemudian dia pake ajax dan jquery, di masing jumlah upload gambarnya itu nek wis isi ya dianggep submit(). Cara itu juga digunakan di CPanel

    BalasHapus