[Contoh] Input Database MySQL dari File Berformat Excel dengan Excel Reader (no-pear)

Jika pada tiga posting yang lalu ( ini dan ini ) telah dipost tentang tutorial penggunaan PHP untuk keperluan export data ke file berformat Excel, maka kini sebaliknya. Kita akan coba lakukan import data dari Excel ke dalam tabel MySQL. Cara lama yang biasa digunakan untuk melakukan import data dari excel ke dalam MySQL adalah dengan menyimpan file excel tersebut sebagai file berformat CSV ( Comma Separated Value ). Namun diyakini bahwa format CSV ini tidak akan valid karena batas antar sel dan batas antar baris masih menggunakan karakter huruf alfabet. Semisal, ditentukan sebuah cara bahwa batas sel adalah dengan tanda koma, maka jika dalam konten sel terdapat koma, maka akan terjadi kesalahan dalam pembacaan jumlah sel.

Cara paling baik yaitu membiarkan saja dalam bentuk XLS file yang dibuka encoding datanya, dan kemudian direstore dalam bentuk text yang bisa dibaca dengan normal oleh PHP. Untuk membuka encoding data ini telah disediakan sebuah tools yang terkenal yang dinamakan Excel Reader. Biasanya filenya bernama excel_reader2.php. Disini dapat di download di : https://blogit.bimosaurus.com/demo/excel_reader2.php.zip. Silakan di download dan letakkan dalam direktori libs anda. Di dalam excel reader ini telah terdapat class dan fungsi-fungsi untuk melakukan pembacaan file excel sehingga data yang kita upload akan langsung diparsing konversi ke bentuk excel. Kita selaku developer tinggal menggunakan. Bagaimana contoh penggunaan dan penjelasannya?

Langkah pertama adalah biasanya kita perlu bantuan sebuah form yang berfungsi sebagai upload data. Misal kita buat sebuah file bernama : import.php, kira-kira berisi :

 



NipNamaHonorStatus Ambil



MasterFile Disini

Selanjutnya,dibuat juga file tujuan uploadnya yang pada form di atas diarahkan ke file : import-do.php. File tersebut akan berisi : menangkap file,dan memparsing data yang ada di dalamnya dengan tools excel_reader2.php, dan melakukan restore data dalam database MySQL.

Saya masih menggunakan tabel yang telah digunakan dalam posting sebelumnya yaitu tabel pegawai :

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

Selanjutnya saya mempersiapkan sebuah master file excel seperti berikut ini : https://blogit.bimosaurus.com/demo/master_excel.xls. Master file ini berfungsi untuk panduan user penginput data dalam melakukan inputing data. Sedangkan file import-do.php berisi demikian :

rowcount($sheet_index=0);
 
$i = 2; // dimulai dari ke dua karena baris pertama berisi title
while( $i<=$jumlah ){
 
   //$cell->val( baris,kolom )
 
   $nip  = $cell->val( $i,1 );
   $nama = $cell->val( $i,2 );
   $honor= $cell->val( $i,3 );
   $status_ambil = $cell->val( $i,4 );
 
$sql ="INSERT INTO `pegawai` (`nip`,`nama`,`honor`,`status_ambil`) VALUES ('$nip','$nama','$honor','$status_ambil')";
mysql_query( $sql );
   $i++;
}
 
}
header("Location:https://blogit.bimosaurus.com/demo/import.php");
?>

Penjelasannya adalah sebagai berikut, file yang diupload hanya akan diletakkan dalam direktori temporary, dan mulai dibaca. Sheet_index merupakan nomer worksheet yang dibaca. 0 adalah worksheet pertama. Selanjutnya pembacaan baris dimulai dari nomer 2 (dua) karena baris pertama berisi header kolom. Pembacaan akan dimulai dengan proses looping yang dimulai dengan angka dua dan berakhir pada jumlah baris excel yang terbaca oleh php. Urutannya adalah $cell->val( baris,kolom ); Data diinisiasi dalam variabel masing-masing, dan dimasukkan dalam query, dan dieksekusi.

Nah file ini dapat dilihat di https://blogit.bimosaurus.com/demo/import.php. Kemudian perhatikan juga dalam posting sebelumnya, tentunya dalam demo terjadi perubahan, karena saya dalam hal ini menggunakan tabel yang sama. Dua script ini bisa saja disatukan jadi satu, dengan catatan bahwa form html diletakkan di bagian bawah dari aksi uploading, dan tentunya pengubahan arah form action. Permasalahan yang sering terjadi dalam proses uploading adalam masalah format cell, yang biasanya dapat bervariasi sekitar Text, Numeric, dan lain sebagainya. Oleh karena itu user perlu diarahkan untuk menggunakan format cell dengan benar.

Sebenarnya masih terdapat satu hal terkait excel ini, yaitu penggunaan PEAR. Dimana dalam PEAR telah lengkap untu segala library termasuk upload download excel. Namun tutorial ini berguna untuk semua server tanpa PEAR ataupun ada PEAR. Karena tidak selalu server berinstalkan PEAR.

Selamat Mencoba, semoga berguna

32 thoughts on “[Contoh] Input Database MySQL dari File Berformat Excel dengan Excel Reader (no-pear)

  1. gan…saya udah jalankan sesuai dengan punye agan,…tp ko yg tampil ” C:\WINDOWS\TEMP\PHP 1 not ready “..

    tolong gan solusinya…thx.

    1. Hal itu disebabkan karena direktori C:\Windows\Temp\PHP tidak ada. Sedang secara default, php.ini, sepertinya menset ke arah sana. Coba mas, dibuat dulu ya, kalau memang sudah ada, cek di dalam PHP ini. Kalau ini sudah ada dan tetep error, silakan pada bagian script anda , bagian awal sendiri ditambahkan ini :

      session_save_path(realpath(dirname('C:/Windows/Temp/PHP'));
      

      hal itu terjadi karena PHP gagal menuliskan Temporary process ke dalam direktorinya.. Silakan dicoba semoga bermanfaat, ditunggu umpan baliknya..

      Salam…

  2. The filename C:\WINDOWS\TEMP\php18.tmp is not readable

    nip nama honor status

    tampilan’y sperti ini gan, dan bgm caranya buat direkktorynya.? dan sy jg sudh copy script yg dr agan….tolong solusinya gan..

  3. gan….sy ambil inisiatif utk instal ulang localhost nya dan ternyata sdh bisa gan…thx

    skrg pertanyaanya bgm cara utk paging nya krn data pasti byk gan…tolong ya gan…thx

  4. maaf gan…yg bs di instal ulang dan jalan hanya di PC bukan di laptop ane, knp ya gan…padahal sama pk xp sdh di instal ulang jg.

    dan sy sdh buat directory’y jg C:\WINDOWS\TEMP\php …

    mhon solusinya gan, apakah ada msalah di laptop ane, shingga ga bs…thx.

    1. Coba gunakan cara ini:

      – Bukalah command prompt anda, Start -> Run -> CMD
      – Ketik :

      cacls "C:\Windows\Temp" /T /grant "User PHP Runs As":RWMD

      Silakan dicoba, semoga bermanfaat

  5. saya sdh coba pak dan saya pun instal ulang dg ganti di drive: D tdk di C; lagi.

    tp lagi2 ga bs dan ttp ke C:\Windows/TEMP/php 1 notready

    1. Kali ini cobalah dengan klik : Tools -> Folder Option, pilih View, dan hilangkan centang pada Just Enable Simple File Sharing. Pilih OK, selanjutnya carilah direktori Windows\Temp pada windows Explorer, klik kanan, dan pilihlah pengaturan Security and Sharing. Pada bagian Security, settinglah agar user Everyone dapat melakukan akses ke sana.

      Jika tidak, carilah file PHP.ini anda, dan carilah bagian ini :

      ; Whether to allow HTTP file uploads.
      file_uploads = On
      
      ; Temporary directory for HTTP uploaded files (will use system default if not
      ; specified).
      ;upload_tmp_dir =
      
      ; Maximum allowed size for uploaded files.
      upload_max_filesize = 10M
      
      

      Ubahlah setting upload_tmp_dir ke arah direktori lain yang dapat anda buat misal jika anda menggunakan xampp adalah : C:\xampp\temp, dan pastikan direktori itu telah anda buat

      ; Whether to allow HTTP file uploads.
      file_uploads = On
      
      ; Temporary directory for HTTP uploaded files (will use system default if not
      ; specified).
      upload_tmp_dir = C:/xampp/tmp
      
      ; Maximum allowed size for uploaded files.
      upload_max_filesize = 10M
      
      

      Atau langkah lain adalah : pada awal script berilah seperti ini :

      session_save_path(realpath(dirname('C:/Xampp/tmp'));
      

      Letakkan itu pada bagian awal script anda.. Sebenarnya inti dari apa yang kita lakukan adalah membuat agar PHP dapat menyimpan upload file sementara dalam direktori tertentu. Jika direktori C:\windows\temp tidak dapat ditulisi, dan kita gagal membuat permissionnya, maka kita akan membuat direktori temp yang lain dan akan kita setting baik dari PHP ini ataupun dari code.

      Selamat mencoba semoga sukses, semoga bermanfaat

  6. maaf gan, sebelumnya sy sdh merepotkan agan2…saya kira windows xp nya perlu diinstal lg deh…krn qt sdh berusha msh ttp lum bisa.

    gmn menrut agan..? yg terbaik solusi sperti apa..?

    thx ya…

    1. hehehe tidak ada yang direpotkan, kita suka dengan kegiatan. Sebenarnya kemungkinan ada konfigurasi yang kita juga belum bisa melihat untuk kasus komputer anda seperti apa. Mohon maaf keterbatasan visual kami 🙂 tapi kami berusaha untuk terus berbagi..

  7. kalau di excelnya ada colu merger gimana ya gan?
    a
    1 b
    c
    _____
    a
    2 d
    f

    angka 1 dan 2 merger colum pada excelnya dan ketika sudah di import hasilnya dalam database sudah dipasangkan:
    angka|huruf
    1 a
    1 b
    1 c
    2 a
    2 d
    2 e

    mohon bantuannya

  8. maaf pak..koq saya ada error
    di

    Assigning the return value of new by reference is deprecated in D:\Project\Mplik\includes\excel_reader2.php on line 525

    mohon pencerahannya
    terima kasih

    1. Oh ya mas, mohon maaf, hal itu karena excel_reader2.php terdapat sintaks yang tidak lagi didukung oleh versi PHP anda. Oleh karena itu saya siapkan artikel yang lain lagi. Langkah lain yang lebih cepat adalah : anda mendowngrade versi PHP

    1. Saya juga menggunakan PHP5 mas. Detailnya php5 berapa mas? misal php 5.2 atau berapa? Karena permasalahan PHP adalah pola deprecated untuk fungsi yang dianggap memiliki bug issue. Tapi silakan dicoba dulu, bisa berfungsi atau tidak. Jika tidak berfungsi, errornya dimunculkan saja, lantas kita analisa. Jika ada fungsi yang terdeprecated oleh PHP yang terbaru, kadang masih bisa kita usahakan secara manual.

  9. sdh saya ikuti langkah-langkah dari tutor yg diatas, tpi ketika saya upload muncul notifikasi sperti ini :
    Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\telkom_dbs\libs\excel_reader2.php on line 916

    apa mngkin permasalahannya gara” versi php yg saya gunakan ya mas ?
    mhon infonya, maaf jika terlalu sering bertanya hehehe

  10. maaf nih pak
    hasil di komputer seperti ini kenapa ya?

    <
    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\phpexcel\import-do.php:1) in C:\xampp\htdocs\phpexcel\import-do.php on line 24

    makasi

  11. pak, pesan error hilang.
    brower lgs menuju ke import-do.php namun blank ga ada apa2.
    saya cek di phpmyadmin data ga masuk pak.
    apa yang salah??

  12. gan kalo ane tipe data excelnya .csThe filename C:\xampp\tmp\php9069.tmp is not readablev gimana gan, masa muncul tulisan

  13. yg sy mw tanyakan bagaimana caranya mengambil data dr excell,tapi perkolom(menyamping)? di tutorial yg bapak buat kan perbaris (mulai dari baris ke2 sampai kebawah)

    terima kasih sebelumnya

  14. gan, tolong bisa bantu ada error gini:
    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2304 bytes) in C:\xampp\htdocs\eamd\config\excel_reader2.php on line 1384

    Makasih

Leave a Reply to tofan Cancel reply

Your email address will not be published. Required fields are marked *