Eksport data MySQL ke Ms. Excel dengan PHP

February 14th, 2007 89 Comments fahmij

Beberapa waktu yang lalu saya sempet jalan-jalan ke sini, maksud hati mau download appserv, dan rupanya ada artikel tentang eksport data MySQL ke Ms. Excel (XLS format) dengan PHP, dan rasanya ini akan sangat bermanfaat untuk (misalnya) mencetak laporan yang bisa diedit dengan mudah. Berikut kutipan kodenya :

//function for XLS
function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}

Kemudian kita tambahkan header agar output bisa didownload dalam bentuk XLS format, serta query ke database dan hasil query diletakkan pada cell-cell di spreadsheet. Kutipan kodenya :

// query database
$queabsdetail = "SELECT id, nama, nohp FROM tabel_user";

// eksekusi query
$exequeabsdetail = mysql_query($queabsdetail);

// read the result and insert into new array
while($res = mysql_fetch_array($exequeabsdetail)){
$data['id'][] = $res['id'];
$data['nama'][] = $res['nama'];
$data['nohp'][] = $res['nohp'];
} 

$jm = sizeof($data['id']);
// sending header
header("Pragma: public" );
header("Expires: 0" );
header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header("Content-Type: application/force-download" );
header("Content-Type: application/octet-stream" );
header("Content-Type: application/download" );;
header("Content-Disposition: attachment;filename=fileexcel.xls " );
header("Content-Transfer-Encoding: binary " );
xlsBOF();
xlsWriteLabel(0,0,"Sample : Export To Excel" );
xlsWriteLabel(2,0,"Jumlah Data" );
xlsWriteLabel(2,1,$jm); xlsWriteLabel(4,1,"No" );

//menulis pada cell (baris 4 kolom 1)
xlsWriteLabel(4,2,"Nama" );
xlsWriteLabel(4,3,"No. Hp" );
$xlsRow = 5;

//posisi awal
for ($y=0;$y<$jm;$y++){ //perulangan untuk baca data
++$i;
xlsWriteNumber($xlsRow,1,"$i" );
xlsWriteLabel($xlsRow,2,$data['nama'][$y]);
xlsWriteLabel($xlsRow,3,$data['nohp'][$y]);
$xlsRow++;
}
xlsEOF();
exit();

Semoga bermanfaat..

 

89 Responses to “Eksport data MySQL ke Ms. Excel dengan PHP”

  1. loena February 15th, 2007 at 3:02 am

    wah..karna ini juga nih yang memudahkan tugas bikin laporan bulanan. tengkyu ya miet…. :)

  2. mee February 16th, 2007 at 12:26 am

    Hehe..sama-sama mba’…

  3. alle February 16th, 2007 at 1:36 am

    Good job!
    semoga barokah

    Ditunggu sumbangan ilmu yg lain di blog ini

  4. ukie February 25th, 2007 at 11:37 pm

    mbak ,gimana sih cara menggunakan scrift ini ?maklum aku masih belajar php/pemula.Sudah aku simpan di notepad di buka dibrowser kok malah hurup nya doang…?Trim atas semua nya..

  5. /mee February 26th, 2007 at 12:35 am

    @ukie
    Ada beberapa langkah yg mungkin bisa membantu :
    1. Kita siapkan Apache (web server), PHP engine (script engine/parser), MySQL (database server). Untuk mudahnya, kita bisa pake Appserv , di mana kita tinggal download, install & kita akan mendapatkan semua yang kita butuhkan tadi (Apache, PHP, MySQL).
    2. Setelah semua siap, kita lanjutkan dengan pembuatan satu file yang berisi script di atas, lalu file tersebut diletakkan di document root. Karena isi script di atas ada hubungannya dengan database (MySQL), maka kita harus pastikan koneksi PHP & MySQL telah berhasil dibuat, dan juga database+tabel sudah harus ada.
    3. Untuk ngetest hasilnya, bisa buka lewat browser (http://localhost/scriptexcel.php).
    4. Kalau masih belum berhasil, mungkin kita perlu berkunjung ke http://www.php.net untuk download manual PHP lebih dulu.
    5. Untuk tambahan support, kita bisa gabung ke milis programmer PHP di “id-php”, ato forum-forum diskusi yang banyak tersebar di internet.
    6. Semoga membantu.
    7. Tolong jangan panggil mbak ya :) , saya lebih prefer dipanggil mas…

  6. puput tersayanggg July 5th, 2007 at 1:06 pm

    mkasi….

  7. ayu July 23rd, 2007 at 7:21 am

    wa,, tengkyu banget lho..

    baru mau aku coba sih..

    ku harap bisa ngbantu aku.. :)

  8. ayu July 23rd, 2007 at 7:22 am

    oya mau tanya mas, klo kita bikin excelnya langsung readonly bisa ga??

  9. /mee July 23rd, 2007 at 7:30 am

    # puput
    kembali kasi..

    # ayu
    hmm…sy belum tau e mba’ kalo soal itu, belum pernah nyoba n belum pernah nyari, karena tujuan saya mengexport data ke excel supaya bisa diedit lagi, jadi ndak readonly gitu :)
    Mungkin kalo tujuannya supaya ndak bisa diedit (atau setidaknya susah diedit), gimana kalo pake export to pdf, misalnya pake class fpdf?

  10. Gunawan Hidayat August 6th, 2007 at 2:00 am

    Hai Ada yang tahu bagaimana membaca format data di cell excel dengan php agar bisa saya masukan ke Mysql. mohon balas nya jika ada yang tahu ? please…..:((

  11. mee August 6th, 2007 at 3:03 am

    # Gunawan Hidayat
    barusan nyari mas, ketemu “phpexcelreader”, udah sy upload di sini. Sepertinya bisa dimodifikasi untuk dieksport ke MySql. semoga. :)

  12. aguspuryanto August 9th, 2007 at 6:32 am

    mas tadi malam tak praktekin di rumah pake php triad, tapi hasilnya kok error!
    contoh script:
    1.
    nah errornya tuh pada line ke 4
    Tolong di jawab segera!
    :-?

  13. aguspuryanto August 9th, 2007 at 6:38 am

    eh sorry, komentarku kok gak kelihatan hee…hhh
    inti errornya tu pada
    echo pack(”ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
    pada tiap-tiap function,setelah baca documentationnya, aku jadi gak mudeng tentang dengan angka-angka di belakang “sssss”.Tolong di jelaskan biar jelas apa maksudnya!

  14. mee August 9th, 2007 at 6:49 am

    # aguspuryanto
    hehehe…maaf, saya lupa mengatakan bahwa penekanan posting ini ada di penggunaan function for XLS (bagian atas) dalam mengexport data ke file XLS (bagian bawah). Jadi untuk maksud dari angka-angka di belakang “sssss” saya sendiri ndak paham. (Function tersebut saya kutip dari http://www.appservnetwork.com)
    Mengenai error yang mas maksud, kalau boleh tau, apa bunyi errornya? mungkin saya bisa bantu :)

  15. aguspuryanto August 9th, 2007 at 7:09 am

    waduh kalo errornya aku lupa, tapi yang jelas error menunjukkan pada :
    echo pack(”ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
    setelah aku ganti dengan
    echo pack (“ssssss”, 0×123, 0×456, 65, 64);
    memang berhasil menghasilkan file excell, tapi isinya:
    berupa angka-angka yang tidak aku mengerti, dan isi data di mysql tidak muncul.Sorry deh, aku setengah-setengah ingat.besok aku kasih laporan detailnya. lagian aku baru cobain di pc lokal dengan phptriad. gak tau lagi kalo dah di upload ke server. anyway Thank’s a lot for your respon!.

  16. mee August 9th, 2007 at 7:56 am

    # aguspuryanto
    Hmm…seinget saya, kita ndak perlu ngubah-ubah yang function for XLSnya, jadi tinggal dipanggil aja kaya’ di bagian bawah (contoh)..

    Sebentar, mungkin kalo kita copy paste langsung dari tulisan di atas jadi ndak bisa, karena karakternya /font-nya courier (kena efek css pula). Mungkin coba di ketik ulang aja kodenya mas.

    Semoga membantu.

  17. SANJAY DUTT August 24th, 2007 at 3:40 am

    tengkyu2… \:d/

  18. suardin_034@yaho.. August 27th, 2007 at 10:42 pm

    hei tolongin dunk…gimana koneksi

  19. suardin August 27th, 2007 at 10:43 pm

    hei tolongin dunk…gimana koneksi php dengan excell:">error nieh

  20. mee August 27th, 2007 at 11:49 pm

    # suardin
    Bisa dijelaskan error-nya gimana? :)

  21. riri September 10th, 2007 at 11:01 am

    kang , makasih yah. sangat membantu bangget blognya….:d

  22. mee September 11th, 2007 at 5:21 am

    # riri
    sama-sama kang, alhamdulillah bermanfaat… :)

  23. Fadly October 1st, 2007 at 5:40 am

    Salam kenal…

    tengkyu atas bantuannya…:)>-

  24. Youfan October 2nd, 2007 at 4:40 pm

    7. Tolong jangan panggil mbak ya :) , saya lebih prefer dipanggil mas…

    :))

    Sorry Mied, nitip nye-pam ketawa, nggaktahan, abis aku bener-bener ketawa baca ini…

    =))

  25. deni_sugi October 15th, 2007 at 8:51 am

    :( need help kalo FDPF boleh nanya disini ga…?
    stuck nih…:((

  26. mee October 21st, 2007 at 9:11 am

    # deni_sugi
    :) ada apa dengan FPDF ??

  27. joe October 30th, 2007 at 3:07 am

    Warning: Cannot add header information – headers already sent by (output started at C:\apache\htdocs\tes\scriptexcell.php:9) in C:\apache\htdocs\tes\scriptexcell.php on line 43

    kalo aku salah satu errornya seperti di atas
    minta tlg ya.. gimana benernya.. thx b4:)

  28. mee October 30th, 2007 at 3:17 am

    # bang joe
    kemungkinan ada ‘output’, semacam echo / print / ato tag html sebelum kode-kode itu, padahal file nantinya ngeluarin output dalam bentuk “streaming”; jadi ndak boleh ada output sebelum kode-kode di ats..

    untuk contoh filenya bisa dilihat di sini.

    :)

  29. sulhan November 1st, 2007 at 9:25 am

    kalo kebalikannya bisa ndak dari exel ke mysql?tlg ya..:):)

  30. mee November 2nd, 2007 at 12:46 am

    # sulhan
    untuk dari excel ke mysql sy pernah nyoba pake phpExcelReader, bisa mbaca content excel trus exportnya dalam bentuk CSV (Comma Separated Value). Contoh bisa didownload di sini

  31. joe November 2nd, 2007 at 3:17 am

    Okey, udah bisa kok mas mee.. thx ya…:)
    tapi kalo misal di kasih warna background/font nya script yang mana yang harus di edit??.. thx b4 ;)

  32. joe November 2nd, 2007 at 6:42 am

    Maksutna font/background di excell nya..

  33. mee November 5th, 2007 at 12:31 am

    # joe
    wah, klo itu sy belum nyobain pak.. maap :)>-

  34. sanji kun November 16th, 2007 at 4:29 am

    kalo export excel dari php pake sql server ma oracle gimana??:-?

  35. D'Fariztha November 23rd, 2007 at 10:11 am

    :x thanks lot…. wa dunlud yach :P:d/:d/

  36. Putu Ananta WIjaya November 28th, 2007 at 12:05 pm

    mas…. saya boleh minta tolong ndak??
    saya punya problem dengan masalah exporting file database mysql ke xls melalui php, kalau boleh, minta contoh script untuk exportingnya ya mas… yang lengkap, biar gampang tracingnya…

    salam
    kalo boleh ke putuananta2005@yahoo.com
    :)

  37. fahmi November 29th, 2007 at 1:42 am

    # sanji kun
    wah, maaf mas, untuk itu saya belum pernah coba, tapi saya rasa caranya ngga jauh beda, mungkin bedanya hanya di koneksi php ke SQL Server ato oraclenya aja, dan untuk exporting ke excelnya saya rasa tetap dengan fungsi yang sama… CMIIW

    # D’Fariztha
    sama-sama :)

    # Putu Ananta Wijaya
    Untuk contoh scriptnya bisa dilihat di link ini mas : http://www.fahmijafar.net/filex/view.php?file=source/exporttoexcel.php

    salam :)

  38. dear December 4th, 2007 at 7:53 am

    ada yang tau cara buat angka dalam tabelberubah otomatis kalo aku isi input text gak ? kayak di http://www.bhinneka.com yang bagian shoppingcartnya itu ? pake javascript sih tapi kok susah yah gak bisa2

  39. hidayatvindy December 13th, 2007 at 5:28 am

    Hallo Kawan2x PhpHolic Aku punya Kesulitan meng-export dari mysql ke excel soalnya coloum headernya nggak kebawa…. Gimana yach
    tolong kalau ada yang punya scriptnya kirimin ke hidayatvindy@gmail.com

    kalau alamat yang ada contoh-2x source php gratis dimana???
    Thanks
    Salam Php Holic:-\:-\:-\:-\

  40. fahmi December 14th, 2007 at 8:14 am

    # hidayatvindy
    Untuk contoh scriptnya ada di : http://www.fahmijafar.net/filex/view.php?file=source/exporttoexcel.php

  41. Agustian January 18th, 2008 at 9:57 am

    mas fahmi,

    sebelumnya makasih banyak dah kasih source code nya. Cuman aku nda ngerti bagaimana konsepnya ? Lalu bagaimana caranya aq bisa nulis Label nya ? Label kolom. Bisa kasih penjelasannya mas ?

    Buat pengembangan lebih lanjutnya mungkin akan lebih sip. Karena akan sangat membantu sekali.

    Agustian

  42. fila January 24th, 2008 at 3:11 am

    :)
    oh ya ikut nimbrung yaa

    kalo aq pake yg
    SpreadsheetWriteExcel – Write to a cross-platform Excel binary file_ – search_cpan_org.htm

    itu bisa nyambung g’ y, cz ketika aku include file nya pasti kesalahany

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\hrd-training\frm_input_usulan.php:1) in C:\xampp\htdocs\hrd-training\excel\test-excel.php on line 91

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\hrd-training\frm_input_usulan.php:1) in C:\xampp\htdocs\hrd-training\excel\test-excel.php on line 92

  43. fahmi January 24th, 2008 at 3:29 am

    # Agustian
    Sama-sama mas :) Setau saya, fungsi di atas itu melakukan proses “streaming” outputnya ke dalam suatu file dengan jenis excel, dimana dilakukan proses pembacaan dari database, lalu diletakkan pada cell-cell tertentu.
    Untuk meletakkan label, dengan fungsi xlsWriteLabel(), contohnya : xlsWriteLabel(4,2,”Nama”); // menulis label ‘Nama’ pada baris ke 4 kolom ke 2.

    # fila
    Klo errornya “Cannot modify header information – headers already sent by”, mungkin ada output lain sebelum fungsi dipanggil, misalnya spasi, atau tulisan lainnya, padahal fungsi excel itu mengeluarkan output secara streaming via fungsi header(); jadi pemanggilan header itu letaknya paling awal di outputnya..

    semoga membantu .. :)

  44. sab January 26th, 2008 at 7:14 am

    kenapa saat buat report ke excell koq muncul warning “unable to read”

    Thanks

  45. eka January 28th, 2008 at 5:08 am

    all,
    gimana caranya untuk menyimpan hasil query ke dalam excel dari php tanpa harus mendownload.

    thx bantuannya

  46. rida February 28th, 2008 at 8:59 am

    bagaimana caranya buat merubah data dari mysql ke excel tolong dibantu yah buat membuat modul laporan rido ga bisa??

  47. fahmi February 29th, 2008 at 11:37 pm

    # eka
    Maaf, untuk itu saya belum pernah coba. Tapi mungkin konsepnya mirip manajemen file(dengan fungsi fopen(), fread(), fputs()).
    CMIIW

    # rida
    Untuk kode program yang saya cantumkan di atas, itu bisa digunakan untuk mendapatkan output berupa file excel yang recordnya dari data di MySQL.

    Semoga membantu.
    :)

  48. Syamsuri March 27th, 2008 at 6:21 am

    Tank’s alot

  49. kenz April 6th, 2008 at 11:22 am

    mas aq mau nanya script php eksport data mysql ke format pdf ??

    tolong ya…buat tugas kul???
    thanx b4..

  50. fahmi April 7th, 2008 at 12:48 am

    # kenz
    Untuk export ke pdf (print to pdf), bisa menggunakan class fpdf (http://www.fpdf.org/). Di site-nya udah ada tutorial yang cukup membantu.

    semoga bermanfaat.
    :)


Leave a Reply