Friday, August 3, 2007

Export MySQL data ke Excel dengan PHP

Kadang-kadang data yang berada di database akan dicetak atau disimpan dalam format Excel atau spreedsheet. Beberapa aplikasi client database menyediakan fasilitas Export Data, baik ke dalam tabel html, DBF file, maupun Excel File.
Sekarang Kita akan melakukan export data MySQL ke file excel dengam menggunakan aplikasi yang dibuat dengan PHP. Berikut angkah-langkahnya,
Kita buat tabel contoh (id int(5), Nik varchar(8), nama varchar(25)) di dalam database test. lalu kita isi tabel tersebut dengan beberapa data dan kita export data tersebut ke dalam format file Excel.

Langkah pertama adalah melakukan konfigurasi koneksi ke server MySQL:
<?php
$host="localhost";
$user="whoami";
$pass="screet";
$db="test";
$conn=mysql_connect($host,$user,$pass) or die(mysql_error()."Koneksi Gagal");
?>

Setelah melakukan koneksi database dan koneksi berhasil, lalu kita buat tabel di atas, jangan lupa gunakan @ pada fungsi mysql_query, tanda @ digunakan untuk menghilangkan komentar error ketika ada kesalahan pembuatan tabel, hal ini dimaksudkan apabila tabel sudah ada, maka program tetap jalan tanpa ada pesan error.
Setelah Tabel selesai dibuat kita isi data tabel tersebut, berikut contoh script untuk membuat tabel dan mengisi datanya:
<?php
/* create database */
mysql_select_db($db);
$create="CREATE TABLE contoh (id INT( 5 ) NOT NULL AUTO_INCREMENT ,nik VARCHAR( 8 ) NOT NULL ,nama VARCHAR( 25 ) NOT NULL ,PRIMARY KEY ( id ) ,UNIQUE (nik)) TYPE = innodb";
$kueri_create=@mysql_query($create);
/* selesai create */

/* Insert data */
$insert="INSERT INTO `contoh` ( `id` , `nik` , `nama` )VALUES ('1', '00100001', 'Didik'), ('2', '00100002', 'Kurniawan')";
$kueri_insert=@mysql_query($insert);
?>

Setelah tabel siap dan data sudah ada, sekarang kita akan melakukan proses export data tersebut, berikut scriptnya:
<?php
$select = "select * from contoh order by nik";
//die($select);
$export = mysql_query($select);
$fields = mysql_num_fields($export);
for ($i = 0; $i < $fields; $i++) {
$header .= mysql_field_name($export, $i) . "\t";
}
while($row = mysql_fetch_row($export)) {
$line = '';
foreach($row as $value) {
if ((!isset($value)) OR ($value == "")) {
$value = "\t";
} else {
$value = str_replace('"', '""', $value);
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r","",$data);
if ($data == "") {
$data = "n(0) Records Found!\n";
}
header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=contoh.xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";
?>

Selamat mencoba!
Sebagian source diambil dari berbagai sumber


Technorati Profile

25 comments:

  1. manteb banget bro artikelnya

    thanks banget dah ;-)

    ReplyDelete
  2. Anonymous12/8/08 17:26

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php:2) in C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php on line 47

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php:2) in C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php on line 48

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php:2) in C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php on line 49

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php:2) in C:\xampp\htdocs\bpsa\sampah\mysql_to_xls2.php on line 50
    id nik nama "1" "00100001" "Didik" "2" "00100002" "Kurniawan"

    ReplyDelete
    Replies
    1. Kalo boleh ane jawab berdasarkan pengalaman... :)
      Error seperti itu biasanya terjadi karena link yang kita buat ke file export.

      Contoh:
      Misalkan file yang berfungsi untuk export kita beri nama export.php, maka link ke file tersebut harus berupa nama asli filenya (ane ga tau istilah pemogramannya). Jadi bentuk link nya adalah http://localhost/siska/export.php bukan http://localhost/siska/index.php?page=export (misalkan ya)

      seperti itu. semoga membantu... :)

      Delete
  3. Mas, saya ada 2 pertanyaan tentang select box.
    1. Bagaimana cara saya menampilkan index dari option yang saya pilih saat saya memilih option pada select box?
    2. Bagaimana cara, select box yg ke-2 berubah pada index ke 3 saat saya memilih select box ke-1 dengan index ke-2? Balas di greysoftwareman@gmail.com dan di sini.
    Thx

    ReplyDelete
  4. Anonymous2/9/08 11:35

    kalo mau export ke txt gmn??

    ReplyDelete
  5. Anonymous9/9/08 13:46

    mas didik, thanks buat artikelnya.
    btw, bisa di jelasin gak step2 skrip eksport datanya?
    trus kalu mau atur Headernya (ID | NIK | Nama ), misalnya di set Bold, bisa tdk? kalu bs, gmn caranya yach? trims

    ReplyDelete
  6. Anonymous5/2/09 10:19

    mas...cara munculin window buat ngesave nya gimana?

    ReplyDelete
  7. Anonymous2/6/09 13:16

    Hi.. Saya izu dari malaysia.. boleh ke saya memohon bantuan tapi tak tahu la jika kamu dapat membantu saya.. Saya pening memikirkan bagaimanakah dan code yang sesuai untu buat search by date , first date until end date .... I dont know.. but .. I HOPE you can help me !!

    ReplyDelete
  8. manteb keren banget

    ReplyDelete
  9. nice share...
    berguna banget nih info...
    :two thumbs:

    ReplyDelete
  10. Top Markotob euy artikelnya.....
    Thanks berat.... sangat membanti

    ReplyDelete
  11. Makasih artikelnya.sudah aku coba dan berjalan.

    ReplyDelete
  12. @bu70:
    pastikan sebelum script header(...) tidak ada script yang mencetak sesuatu ke browser, misal echo ".."
    atau kode html di luar script
    @IT_Consulting:
    1. setau saya value yang diparsing oleh select box pada aplikasi web cuma value dari form elemen, tidak seperti di VB, Delphi, JAVA yang bisa diambil index valuenya.
    2. untuk memanipulasi dan bekerja dengan select box sering kali saya gunakan java script/ajax mas

    @dana:
    export ke txt sebenarnya bisa dipakai cara yg sama dengan ini dengan headernya diganti dengan

    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=contoh.txt");
    untuk sparatornya bisa diganti koma atau titik koma.

    @izu malaysia:
    jika diperhatikan tipe date di database (mysql) jika ditambahkan dengan integer/longint maka akan menjadi tipe data long
    misal date=2010-10-10 22:20:21
    date+0 menjadi 20101010222021
    dengan tipe numerik seperti ini bisa dibuat komparasi lebih besar dan lebih kecil. dengan operator < atau > atau =

    ReplyDelete
  13. terima kasih mas.
    mas klo misalnya kita mau tampilin datanya supaya rapih gimana yah mas, jadi bergaris tabel gitu...
    mohon infonya

    ReplyDelete
  14. mas ucil,
    sepertinya tidak sesederhana yang dibayangkan... untuk membuat dokumen formating, kt harus tau format file xls/xlsx. biasanya dia berupa XML kl mau buat dokumen berformat kita harus masukan elemen2 XML sesuai dengan yg kita butuhkan.

    ReplyDelete
  15. Wow mantap... coba dulu ah

    ReplyDelete
  16. Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\convert.php:2) in c:\apache\htdocs\convert.php on line 47

    Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\convert.php:2) in c:\apache\htdocs\convert.php on line 48

    Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\convert.php:2) in c:\apache\htdocs\convert.php on line 49

    Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\convert.php:2) in c:\apache\htdocs\convert.php on line 50
    id nik nama "1" "00100001" "Didik" "2" "00100002" "Kurniawan"




    pak didik yang masalah ini mohon di perjelas donk pak???hehe..belum ngerti...

    ReplyDelete
  17. pak bagaimana caranya memindahkan data gambar ke excel? terimakasih

    ReplyDelete
  18. makkasih mas scriptnya

    ReplyDelete
  19. mas saya coba sesuai dengan code nya mas koq tapi jadi nya putih saja ya? bisa bantu?

    ReplyDelete
  20. @addyt

    coba ketik ini di baris 1:


    dan ini dibaris paling bawah :

    ReplyDelete
  21. Anonymous10/1/14 15:35

    mas didik mohon pencerahannya, kalo untuk merubah format number menjadi text ,karena pada saat saya export berubah format contoh data 0001 tetapi yang tampil hanya ada angka 1 saja..terima kasih -dablegh-

    ReplyDelete
  22. Anonymous26/2/15 14:45

    kalo saya mau pilih data sesuai yang di tampilkan dari hasil seleksi.
    contoh: $select = "select * from contoh where kode_partner='$kode_partner' and periode='$periode'";
    kenapa hasil recordnya '0' ya di excel?

    Terima Kasih

    ReplyDelete
  23. saya berhasil membuat file export to excel di localhost, tetapi saat diupload ke hosting tidak dapat mendowload file excel seagaimana di localhost. misal .../pasar/rpt_toko_xls.php?id=02 tetapi page not found. kira-kira solusinya bagaimana ya? terima kasih

    ReplyDelete
  24. saya berhasil membuat file export to excel di localhost, tetapi saat diupload ke hosting tidak dapat mendowload file excel seagaimana di localhost. misal .../pasar/rpt_toko_xls.php?id=02 tetapi page not found. kira-kira solusinya bagaimana ya? terima kasih

    ReplyDelete

Your Comment here