Spreadsheet Excel secara luas digunakan untuk aplikasi keuangan, statistik dan aplikasi lain yang memerlukan penyajian data secara tabulasi. Level penggunaannya yang bervariasi memungkinkan software ini dapat digunakan oleh newbee dan profesional. Karenanya tidak heran banyak data disimpan dan dipertukarkan dalam bentuk Excel.
Maraknya aplikasi web dengan MySQL sebagai databasenya mendorong orang untuk membuat program konversi dari Excel ke MySQL. Ada beragam cara untuk mengonversi, seperti menggunakan COM, ODBC, dan XML. Masing-masing cara meminta persyaratan khusus, seperti adanya komponen COM Excel, software ODBC atau format Excel yang harus XML. Jadi akan tidak mudah bagi aplikasi untuk mengonversi file Excel tanpa adanya komponen-komponen tersebut.
Awalnya terpikir bahwa format Excel XML adalah yang layak, sebab XML parser cukup banyak ditemukan. Tetapi ketika sebuah file Excel berukuran 200kb di-save-as ke dalam format XML menjadi berukuran 1Mb, maka penggunaan format ini sepertinya kurang menggairahkan.
Dalam penelusuran di google, terkuak situs am I work dengan artikelnya Reading/Parsing Excel using PHP http://amiworks.co.in/talk/readingparsing-excel-spreadsheet-using-php, disana dijelaskan bagaimana membaca file excel dan memarsingnya menggunakan librari PHP-ExcelReader dari SourceForge.
Librari tersebut dapat digunakan untuk memindahkan data yang ada di excel ke database MySQL, tentu sahaja dengan serentetan usaha ribet. Bila pekerjaan tersebut dilakukan berulang-ulang, maka menjadi membosankan.
Dengan sedikit sentuhan programming, terbentuklah sebuah librari class Excel to MySQL Converter. Maka konversi excel ke mysql jadi seperti sulapan saja. Petakan column ke field lalu tinggal klik.
Class ini mengasumsikan file excel dengan baris pertama adalah nama kolom, dan mengasumsikan kita sudah menyiapkan tabel di dalam database MySQL ke arah mana data akan dipindahkan.
Sebagai contoh, kita akan memindahkan file excel berikut ke database.

Skema databasenya adalah:

Begini caranya:
Tentukan area excel yang akan dikonversi menggunakan setConvertArea, seperti perintah Excel PrintArea:
Atau, area konversi dapat juga diset dengan menentukan column dan row pertamanya, seperti ini:
Khusus untuk file excel dengan content dimulai dari sel $A$1 seperti excel contoh di atas, kita tak perlu menggunakan setRowStart() maupun setColStart(), karena secara default akan mengacu ke sel tersebut.
Lalu, tentukan pemetaan antara kolom-kolom di excel ke kolom-kolom di MySQL. Kita bisa memilih kolom-kolom excel tertentu saja yang akan dikonversi ke database. Perhatikan bahwa saya tidak memasukkan kolom ADDRESS ke dalam proses konversi.
Lakukan koneksi, lalu injeksikan data.
Pekerjaan selesai. Ada pertanyaan? Silakan tak perlu sungkan.
Catatan perbaikan:
- 18 Juli 2008, dilakukan perbaikan pada class excel2mysql karena adanya bug pada pemetaan column.
Free Download Excel2Mysql berisi librari dan contoh.
Imagination is more important than knowledge…
— Albert Einstein (1879 - 1955)
nurul fadilah
July 16th, 2008 at 10:21 am
Mantabb bozz ..
thanks alot for ur hard work .. really usefull 
achmatim
July 16th, 2008 at 10:55 am
Wah, insya Alloh sangat bermanfaat… terima kasih mas
LuckyGuy354
July 16th, 2008 at 11:02 am
Keren…. terima kasih banyak
indra
July 16th, 2008 at 2:12 pm
Luar biasa..terimakasih atas inovasinya..pasti bermanfaat utk kedepannya
dieq41
July 16th, 2008 at 11:01 pm
wah, kayanya ini yg pernah gw cari2 deh..
thx infonya yaah..gw coba dulu..
paydjo.Net
July 18th, 2008 at 10:21 am
kereeennnn …
thnx ohm
onta
July 18th, 2008 at 11:47 am
wah bagus juga nih
nyoba2 dulu ah
widik
July 23rd, 2008 at 10:30 am
Thanks alot,
ini yang aku cari, ijin download ya
Salam
tias
July 24th, 2008 at 4:40 pm
boss dah donlot dan coba2 bikin nih, tp msh gagak ya.
begitu di jalankan injectData(); malah keluarnya:
SELECT member_name,member_birthday,member_city,member_email FROM excel
tolong dong apanya yg salah ya?
saya dah ikuti tahap2 nya.
thx yaa..
anghuda
July 24th, 2008 at 11:58 pm
@tias, bisa saya lihat script lengkapnya?
tias
July 25th, 2008 at 8:42 am
begini mas, persis seperti yg di atas cuma edit2 data & sql nya aja.
setConvertArea( ‘$A$1:$F$10′ );
$excel2mysql->setColStart(’A');
$excel2mysql->setRowStart(’1′);
$excel2mysql->setColMapping(array(’NAME’=>’member_name’,'BIRTHDAY’=>’member_birthday’,'CITY’=>’member_city’,'EMAIL’=>’member_email’));
$excel2mysql->connectDB (’localhost’,'root’,”,’belajar’,'excel’);
$excel2mysql->injectData();
?>
salah atau kurangnya dmn ya?
thx.
tias
July 25th, 2008 at 9:22 am
ada yg kurang
setConvertArea( ‘$A$1:$F$10′ );
$excel2mysql->setColStart(’A');
$excel2mysql->setRowStart(’2′);
$excel2mysql->setColMapping(array(’NAME’=>’member_name’,'BIRTHDAY’=>’member_birthday’,'CITY’=>’member_city’,'EMAIL’=>’member_email’));
$excel2mysql->connectDB (’localhost’,'root’,”,’belajar’,'excel’);
$excel2mysql->injectData();
?>
tias
July 25th, 2008 at 9:41 am
include “excel2mysql.php”;
$excel_file = “jajal.xls”;
$excel2mysql = new Excel2MySQL( $excel_file );
$excel2mysql->setConvertArea( ‘$A$1:$F$10′ );
$excel2mysql->setColStart(’A');
$excel2mysql->setRowStart(’2′);
$excel2mysql->setColMapping(array(’NAME’=>’member_name’,'BIRTHDAY’=>’member_birthday’,'CITY’=>’member_city’,'EMAIL’=>’member_email’));
$excel2mysql->connectDB (’localhost’,'root’,”,’belajar’,'excel’);
$excel2mysql->injectData();
skr tampilnya: SELECT FROM excel
trus di db nya blm masuk datanya
anghuda
July 25th, 2008 at 6:42 pm
@tias,
pilih salah satu metode untuk menentukan area excel yang
dikonversi, apakah dengan setConverArea()
atau
dengan pasangan setColStart() dan setRowStart().
Ariborneo
July 26th, 2008 at 8:40 pm
Wah…..harus pake ditentukan areanya?
Bisa ga klo tanpa menentukan setConverArea(), soalnya masak tiap file beda setConverAreanya harus menentukan setConverAreanya kan repot, klo filenya 50-100buah gimana?
anghuda
July 27th, 2008 at 8:16 am
@ariborneo,
bisa dong tanpa setConvertArea(),
maka secara default dimulai dari $A$1 dan akhir dari cell pun dapat diketahui secara otomatis.
setConvertArea berguna apabila area convert berada tidak lazim.
Ariborneo
July 27th, 2008 at 2:45 pm
include “excel2mysql.php”;
$excel_file = “jajal.xls”;
$excel2mysql = new Excel2MySQL( $excel_file );
//$excel2mysql->setConvertArea( ‘$A$1:$F$10′ );
//$excel2mysql->setColStart(’A’);
//$excel2mysql->setRowStart(’2′);
$excel2mysql->setColMapping(array(’NAME’=>’member_name’,’BIRTHDAY’=>’member_birthday’,’CITY’=>’member_city’,’EMAIL’=>’member_email’));
$excel2mysql->connectDB (’localhost’,’root’,”,’belajar’,’excel’);
$excel2mysql->injectData();
setConvertArea(), setColStart(), setRowStart() saya matikan muncul SELECT member_name,member_birthday,member_city,member_email FROM excel
trus klo gak dimatiin jadi
SELECT FROM excel
Yang salah apanya ya??? kasusnya persis ama mas Tias
anghuda
July 27th, 2008 at 5:20 pm
@ariborneo, pake PHP versi apa?
tias
July 28th, 2008 at 8:52 am
saya pakai xampp 1.6.7 dgn php 5.2.6
tias
July 28th, 2008 at 3:11 pm
wahh akhirnya ketemu jg masalaha nya..
di excel2mysql.php bagian:
function evalDB() ada echo $query; exit;
setelah saya hilangkan echo $query; exit; baru deh jalan.
thx mr. anghuda
sari
July 31st, 2008 at 10:29 am
saya coba convert excel ke mysql tapi koq masih ada error
nih pesan errornya
Parse error: parse error, expecting `T_OLD_FUNCTION’ or `T_FUNCTION’ or `T_VAR’ or `’}” in c:\apache\htdocs\data_msc\excel2mysql.php on line 22
Fatal error: Cannot instantiate non-existent class: excel2mysql in c:\apache\htdocs\data_msc\coba_convert.php on line 5
Ini script saya
setConvertArea( ‘$A$1:$B$10′ );
$excel2mysql->setColMapping(array(’SPC’=>’spc’,
‘DEST’=>’tujuan’
));
$excel2mysql->connectDB (’localhost’,”,
”,’msc1′,’dest’);
$excel2mysql->injectData();
/***/
?>
Apa yang salah ya?
Mohon bantuannya
Terima kasih sebelumnya……….
Ariborneo
August 3rd, 2008 at 7:51 pm
Makasih mas Tias…. xampp v1.6.6a
Yup…..kayaknya baris “echo $query; exit;” ini lupa dibuang, biasalah untuk testing QUERYnya dah bener apa blom…..
Yang bikin gak jalan scriptnya adalah perintah “exit;” itu
Thanks tuk smuanya
ALdi
August 14th, 2008 at 8:30 am
mas.. gimana klo colomnya berbentuk form di excelnya, bukan berbentuk tabel … dan bagaimana untuk sheet yang banyak ..
mohon bantuannya
Aldi
prouthon
August 19th, 2008 at 11:32 am
wah kereeen… seneng bgtt rasanya kumpul orang2 pinter and semuangad
nunut sedooot brow
aboy
August 21st, 2008 at 12:08 pm
thx bet mazzz,,,,
i’m trying to use it,,,,
hehehehe
ta ijin dl yah,,,,
aboy
August 21st, 2008 at 4:03 pm
mas, tanya dong,
aq dah cobain tu, g da masalah, cm kok yg masuk cuma satu baris aja yah? sisanya g isa masuk, pdhl dah coba kedua cara diatas,,,,
39
Phitias
September 8th, 2008 at 4:25 pm
klo hasilnya mau di merge cells di excelnya gmn ya?
tias
September 9th, 2008 at 9:56 am
klo hasil xls nya nanti cell nya mau di merge gmn ya?
dwip
November 3rd, 2008 at 10:20 am
salut mas…. artikel anda bagus sekali, sangat berguna utk memajukan dunia IT di indonesia.
saya dah coba script ini dan kurang berhasil, hanya satu record (record paling atas) yg berhasil dikonversi ke database sedangkan record yg lain gak tersimpan (contoh dari file xls anda).
please help me, salahnya dimana?
script sbb berikut :
require_once ‘excel2mysql.php’;
$excel_file = “samplex.xls”;
$excel2mysql = new Excel2MySQL( $excel_file );
//$excel2mysql->setConvertArea( ‘$A$1:$E$5′ );
$excel2mysql->setRowStart(1);
$excel2mysql->setColStart(’A');
dwip
November 3rd, 2008 at 1:00 pm
klo cuman pengen update beberapa values dari database yg ada dengan sumber file excel, gimana caranya ya mas…
thanks…
pingin bisa
November 3rd, 2008 at 4:00 pm
mau nanya neh,
di xls ada kolom tgl format tgl dd/mm/yy contoh 13/01/08, kemudian di mysql ada field tgl_trx dengan type date ( yyyy-dd-mm contoh 2008-13-01 ), stelah pake script ini di mysql field tgl_trx ku kok hasil konversinya jadi 1970-01-01, padahal kalo aku pake importnya navicat lancar seperti yg kuharapkan.
kira2 salahnya dimana yah
thanks
hans
November 5th, 2008 at 2:27 pm
Thanks buat inovasinya, sungguh berguna.
ery
November 18th, 2008 at 11:03 am
tanya mas,
kalo cell coverage are nya ada yang kosong gimana?
apa ikut masuk ke database juga?
joe
November 19th, 2008 at 11:54 am
saya sudah coba tapi muncul “Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in E:\xampp\htdocs\converter\Excel2MySQL\excel2mysql.php on line 170″, mohon pencerahannya
Syamsuri Nur
November 26th, 2008 at 12:37 pm
ya awalnya masalah sama dengan tias. query nya masih keluar. tapi sekarang udah kelar. sekali lagi makasih ya mas.
idik
November 29th, 2008 at 11:45 am
public function connectDB ($host,$user,$passwd,$db_name,$db_table) {
$this->db_conn = mysql_connect ($host,$user,$passwd);
$this->db_name = $db_name;
$this->db_table = $db_table;
}
ini manggil variablena kemana?
bambang
November 29th, 2008 at 3:04 pm
maaf pa saat instalasi excel2mysql,diminta unlock kode,tapi ketika udh sy masukkan kodenya tidak valid
kode sy terima dari email yg sy terima …
kenapa y?
Arief
December 2nd, 2008 at 10:31 pm
Wuih…
Akhirnya saya temukan juga pertolongan ini…
Makasih buanyak bro…..
asih
December 17th, 2008 at 10:23 pm
thanks to diskusiweb…. ?
cupidnouva
December 18th, 2008 at 1:57 pm
Thx for the info…
roy
February 6th, 2009 at 8:57 pm
wah keren2.. tapi pasti lebih keren lagi kalu sorce codena dibuat secara lengkap…
bisa copy - paste
jadi saya yang awam ini bisa nyobain…
hehe…
makasi banyak ya semua…
coco
February 18th, 2009 at 11:28 am
wah kalo input data dari excel dapet nilai zero :
format datanya “14/02/2009 17:33:48″
type data dari excelnya adalah DATETIME
please help me
Spondbob
February 24th, 2009 at 7:12 pm
Om setelah aku coba, kok data yg berhasil masuk kok cuman yg baris pertama?
Kenapa ya?
Padahal echo dan exitnya sdh saya hilangkan,
nuts
February 26th, 2009 at 4:30 pm
keren abis …sip banget..thanks bos huda. saya tambahkan properties sheet Number supaya bs fleksibel mengakses data pada worksheet.btw “echo $query; exit;” blm di hapus tuh…:)
Choirul Anam
March 25th, 2009 at 8:36 am
Terima kasih mas.
Setelah saya coba, yang dapat dimasukkan ke database hanya baris pertama saja, yaitu Bijaksana. Sedangkan member dibawahnya belum masuk.
Mohon pencerahannya makasiii
achedy
March 25th, 2009 at 10:44 am
Suwun mas, ternyata lentera sudah menerangi problem saya :). Salam hangat.
anghuda
May 11th, 2009 at 11:18 am
Sama-sama