Kita akan menggunakan library PHP Excel Reader, untuk keperluan percobaan ini saya menyertakan script dan database percobaan, link download bisa dilihat dibagian bawah tutorial ini.

Versi terbaru bisa dilihat di Mengimpor Excel ke MySQL Dengan PhpSpreadsheet

Sebagai contoh, data yang akan kita pakai seperti gambar dibawah ini
database percobaan

Buat sebuah database di MySQL, lalu eksekusi script dibawah ini

CREATE TABLE IF NOT EXISTS `mesin` (
  `mesinID` int(11) NOT NULL AUTO_INCREMENT,
  `mesin_code` varchar(11) NOT NULL,
  `desc` text NOT NULL,
  `seri` varchar(11) NOT NULL,
  `created_by` varchar(12) NOT NULL,
  `created_date` datetime NOT NULL,
  PRIMARY KEY (`mesinID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

table diatas adalah tempat untuk menyimpan file excel yang kita miliki.

Kita mulai ke pembuatan script import, buat sebuah file dengan nama import.php tambahkan script dibawah ini

<title>Script Import File Excel</title>
<h1>Script Import File Excel</h1>
<form method="post" enctype="multipart/form-data" action="jalan.php">
Pilih File Excel*: <input name="fileexcel" type="file"> <input name="upload" type="submit" value="Import">
</form>
* file yang bisa di import adalah .xls (Excel 2003-2007).

Tampilan dari script diatas ketika dijalankan di browser seperti gambar dibawah ini
tampilan import excel

lalu buat script untuk memproses data dari file import.php, kita namakan jalan.php tambahkan script dibawah ini

<?php
include "excel_reader2.php";
$username = "root";
$password = "aksesroot";
$database = "kacibang";
 
mysql_connect("localhost", $username, $password);
mysql_select_db($database);
 
// file yang tadinya di upload, di simpan di temporary file PHP, file tersebut yang kita ambil
// dan baca dengan PHP Excel Class
$data = new Spreadsheet_Excel_Reader($_FILES['fileexcel']['tmp_name']);
$hasildata = $data->rowcount($sheet_index=0);
// default nilai 
$sukses = 0;
$gagal = 0;
 
for ($i=2; $i<=$hasildata; $i++)
{
  $data1 = $data->val($i,2); 
  $data2 = $data->val($i,3);
  $data3 = $data->val($i,4);
  $created_by = 'Admin'; 
  $date = date('Y-m-d H:i:s');
  $rand = rand();
 
$query = "INSERT INTO mesin  VALUES (null,'$data1','$data2','$rand', '$created_by', '$date')";
$hasil = mysql_query($query);
 
if ($hasildata) $sukses++;
else $gagal++;
 
echo "< pre>";
print_r($query);
echo "< /pre>";
 
}
echo "<b>import data selesai.</b>";
echo "Data yang berhasil di import : ".$sukses.;
echo "Data yang gagal diimport : ".$gagal.;
echo "back import";
?>

Script untuk mengimport Excel ke MySQL dengan PHP cukup sampai disini, sekarang coba buka file import.php di browser, pilih file excel yang mau di import pada contoh kodemesin.xls lalu klik import, contoh tampilan waktu proses import selesai
proses import data

Untuk pengembangan lebih lanjut bisa dilihat pada bagian dokumentasi PHP Excel Reader
Link download di update 28 Oktober 2013

Join the Conversation

47 Comments

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

  1. [ASK]

    Data di Excel kolom 1 valuenya “MOTOR”

    Setelah di import hasilnya dari kolom 1 valuenya “MOTO” (di tabel)

    Jadi Valuenya kurang satu digit terakhir itu semua kolom seperti itu.
    ada solusi??

  2. Gan, untuk menampilkan data excel yang gagal diupload selain jumlahnya, bagaimana ya? Terima kasih.

  3. Parse error: syntax error, unexpected ‘;’ in C:\xampp\htdocs\perpustakaan\jalan.php on line 39

    mas kalo ada bacaan itu apa yang salah mas??

  4. gan, ketika upload file untuk kedua kalinya (posisi database ada datanya), banyak data yang gagal di import, itu penyebabnya apa ya?
    saya coba upload dengan file excel >10.000 baris.
    mohon pencerahannya

    1. kalo filenya segede itu emang harus dipecah dulu, bisa dipecah jadi beberapa file. Atau coba cari info tentang chunk

  5. Ini sifatnya menimpa file input yang sebelumnya tidak ? misalnya sebelumnya upload test1.xls sukses. Lalu saya mau menambahkan upload test2.xls apakah file yang pertama diupload akan tertimpa dengan yang terakhir ?

    1. file yang di upload hanya sementara, jadi walaupun meng-upload beberapa kali dengan nama yang sama ngga akan di timpa

  6. gan kl errornya ini kenapa ya?
    syntax error, unexpected ‘new’ (T_NEW) in C:\xampp\htdocs\smsgateway\excel_reader2.php on line 916

      1. semoga msih ada notif mas nya, saya juga sama mas kasusnya seperti mas diatas. file yg saya upload .xls mas, dengan php saya 8.0.2 apakah mempengaruhi?

  7. mau nanya kalo data tidak ada di database gimana ?
    maksudnya gini :
    data di excel : kode=1,2,3
    di database : kode=1,2

    jadi yang kode 3 tidak masuk didatabase,,,,gimana boss ?

    kalo dari sourcenya anda langsung masuk smua ke database…

    1. pertanyaannya kurang jelas, ini data yang ngga ada data apa?
      coba buat contoh aslinya biar lebih jelas kalo kode pake format 1,2,3 pasti ngga mungkin ada tanda komanya.

      1. kurang jelas gimana….
        ya g mungkin juga kode ada komanya..itu misalkan
        kode di database:
        1
        2

        kode di di excel:
        1
        2
        3

        jadi data yang di database kan cuman ada 1 dan 2 ?

        yang jadi pertanyaan gimana prosesnya,,,kalo di anda =

        $sukses = 0;
        $gagal = 0;

        for ($i=2; $ival($i,2);
        $data2 = $data->val($i,3);
        $data3 = $data->val($i,4);
        $created_by = ‘Admin’;
        $date = date(‘Y-m-d H:i:s’);
        $rand = rand();

        $query = “INSERT INTO mesin VALUES (null,’$data1′,’$data2′,’$rand’, ‘$created_by’, ‘$date’)”;
        $hasil = mysql_query($query);

        if ($hasildata) $sukses++;
        else $gagal++;

        itukan langsung masuk semua ke database tidak ada filternya…

        masih kurang paham ???

        1. ya ngga masalah lah, orang ngga ada pembanding data di database. di contoh diatas, databasenya masih kosong, jadi ngga ada masalah.

          jadi anda contoh kasusnya mau nge bandingin data yang ada di database ya? kalo ga ada di tampilin error kalo ada langsung masuk?
          kalo ia ntar saya kasi contoh scriptnya (logikanya) ntar takutnya ngga kaya gitu jadi sia-sia :P

  8. gan dimana caranya agar hasil export database di sql digit terakhir tidak berubah jadi angka nol atau angkanya langsung diexport dalam format text

  9. mas boleh tanya jjika kita menginginkan data yang sudah di export ke exel itu tampilannya lebih baik gmna mas , seperti contoh kaya rekap absensi gitu mas , mohon pencerahaannya mas

    terimakasih

  10. gan tanya ???? hilangin kode ini setelah proses gimana:
    Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\…….\…….\excel_reader2.php on line 916

    1. pake PHP versi berapa? walaupun error tersebut muncul tapi proses import nya sukses kan?
      kalau hanya menghilangkan warning setting di php.ini dibagian display_error = off lalu restart apachenya.

  11. gan kalo field yg di insert tidak urut gimana scriptnya?
    mohon bantuannya ane masih bangung thx :D

    1. terus saya coba edit sendiri gabungin script dari web lain tapi error gan :D
      errornya di line 916

  12. gan tolong bantuannya kalau misal ketika ingin masukan ke mysql, maka dicek dulu apakah data yang masuk sudah ada atau belum untuk menghindari double insert.
    contoh :
    Kode = DT3686.
    sebelum dimasukan ke mysql maka discript jalan.php sekalian dicek. apakah kode tersebut sudah pernah ada atau belum. kalau misal belum, maka data boleh masuk.
    jika sudah ada maka kode tersebut berikut keterangan tidak akan dimasukan. dan ketika dimasukan akan diinfokan bahwa data gagal disimpan karena kode sudah ada sebanyak 7,8,9,dst ….
    mohon bantuan pencerahan dalam pembuatan scriptnya.

  13. Kalau buat format xlsx tidak bisa ya…
    gimana caranya supaya bisa…
    dan kalau mau input data tanggal formatnya gimana…
    saya coba tanggal 2/2/2014 di excel tapi tidak bisa masuk ke database…

  14. sudah seh, aku sudah pake itu untuk sistem akademik dan saya memakai untuk office 2003

  15. hemm.. gan sepertinya script ini belum kompatibel 2007, soalnya aku dah coba, script di atas sudah pernah saya coba di atas dan hasilnyapun ada cell yang kosong di mysqlnya kalo pake excel 2007

    1. kolom sama barisnya udah disesuaikan belum? dari percobaan saya selama ini ga ada masalah. Dan script ini dipake di sistem yang kita gunakan tiap hari.

  16. bro… kok error gini ya setelah diimpor ??? di cek ke db pun gak masuk datanya

    The filename C:\xampp\tmp\php3A2.tmp is not readable

    mohon dibantu ya bro…
    ke email : [email protected]

    terima kasih tutorialnya

  17. gan kalo ditambahi tanggal sekarang sama username pembuat data gimana caranya

  18. Kok Error gini ya bro? apa yang salah ya.

    Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\Monitoring\excel_reader.php on line 916

    Notice: Undefined index: upload in C:\xampp\htdocs\Monitoring\proses_aploud.php on line 7

    Notice: Undefined offset: 0 in C:\xampp\htdocs\Monitoring\excel_reader.php on line 390