Awalnya untuk fungsi membaca file format excel , gw makai plugin Excel reader class dari wiki-nya CodeIgniter yang dibikin oleh James Gifford. Awal-awalnya saat diuji coba lancar-lancar aja, tetapi kendala terjadi saat format data atau kolomnya udah komplek . Sehingga menimbulkan pesan seperti ini :
Padahal gede memorynya udah gw set dari dari 8MB -> 16=> 32 MB , sampai 64 MB terakhir, tapi tetap ga bisa-bisa juga. Gw yakin pasti ada caranya, tapi untuk mencari jawabannya harus ngenet dulu, google, tanya forum atau milis, tapi karena saat itu lagi malas keluar kosan. Gw putusin untuk memakai cara lain ala orang ganteng !
Ada dua pilihan gw saat itu :
- Memakai cara tradisional, yaitu mengkonvert file excel ke CSV , kemudian file CSV tersebut yang dibaca oleh program.
- Menggunakan class Spreadsheet_Excel_Reader yang didapatkan dari link ini .
Melalui pertapaan selama dua detik gw putusin untuk menggunakan pilihan kedua.
Nah, bagaimana caranya :
Tahap Instalasi
Saat kita mengunduh class Spreadsheet_Excel_Reader dari link ini maka didalamnya ada folder bernama “Excel” , yang terdiri dari file oleread.inc dan reader.php, copy-kan dua file tersebut ke folder :
htdocs/[folder_bekerja]/system/application/libraries/
Tentunya tempat directory document root anda bekerja.
Biar afdol , tambahkan kode di baris pertama file “reader.php” sehingga menjadi :
<?php if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);
Buka file reader.php dan editlah baris 31 , menjadi :
require_once ‘oleread.inc’;
Ubahlan nama “reader.php” menjadi Spreadsheet_Excel_Reader.php.
Instalasi selesai.
Cara menggunakan
Buatlah file di controller dengan nama “baca_excel.php”, dan letakkan file excel anda di :
htdocs/[folder_bekerja]/public/upload/
pada artikel ini ke asumsikan nama filenya “dataexcel.xls” .
Kopas atau tulis koding berikut di “baca_excel.php” :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php class Baca_excel extends Controller { public function __construct() { parent::Controller() ; } public function index() { // Load the spreadsheet reader library $this->load->library(’spreadsheet_Excel_Reader’); // Set output Encoding. $this->spreadsheet_Excel_Reader->setOutputEncoding('CP1251'); $file = $_SERVER['DOCUMENT_ROOT']."/folder_bekerja/public/upload/dataexcel.xls" ; $this->spreadsheet_Excel_Reader->read($file); error_reporting(E_ALL ^ E_NOTICE); // Sheet 1 $data = $this->spreadsheet_Excel_Reader->sheets[0] ; for ($i = 1; $i <= $data['numRows']; $i++) { for ($j = 1; $j <= $data['numCols']; $j++) { echo "\"".$data['cells'][$i][$j]."\","; } echo "br />"; } } } ?> |
Buka browser, dan jalankan dengan alamat :
http://localhost/folder_bekerja/index.php/baca_excel/
Dan rasakan perubahannya …
Catatan :
Jika nama class “Spreadsheet_Excel_Reader” terlalu panjang bagi anda, silakan ganti nama classnya + method konstruktornya dan jangan lupa filenya, semuanya disesuaikan dengan nama yang anda inginkan. Sesuai dengan aturan dari CodeIgniter.
Laporkan kepada yang berwajib jika ada yang error !



Mas, kok muncul Fatal error: Call to a member function read() on a non-object in E:\DATA DWI\web_server\www\rcti_lokal\application\libraries\excelread.php on line 381, btw thanks code nya
@dwi setiyadi :
method read konflik atau duplicate kali dalam satu class!
Thanks bro
udah gak ada lagi ya file paketnya ya??
butuh nih…tolong di publish lagi dong ato kirim ke koceng@icqmail.com
makasih…
Maksudnya library PHP Excel Readernya ya? Tadi saya cek kembali sepertinya sudah dihapus. Download aja langsung di sini : http://sites.google.com/site/kohaci/berkas/libraries.rar?attredirects=0
Di extract akan tampil dua file, selajutnya tinggal dimasukkan ke folder system/application/libraries .
NB : Folder libraries hasil extract gak perlu dimasukin, cukup dua file yang ada di dalam folder hasil extract tersebut.
Untuk selanjutnya tinggal mengikuti langkah yang telah saya tulis di atas, yaitu membuat folder public dan membuat file controller testing seperti kode di atas.
Cheers.
Mas, setelah saya coba, muncul pesan Error :
//#############################################
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Baca_excel::$Excel_reader
Filename: controllers/baca_excel.php
Line Number: 14
Fatal error: Call to a member function setOutputEncoding() on a non-object in C:\Program Files\xampp\htdocs\ci\system\application\controllers\baca_excel.php on line 14
####################################################
mohon pencerahannnya, thanks..
Nama librarynya udah diganti? coba baca di tahap instalasi. Nama filenya Spreadsheet_Excel_Reader.php dan nama classnya Spreadsheet_Excel_Reader , klw nama class pemanggilnya Excel_Reader berarti nama filenya Excel_Reader.php (perhatikan huruf kapital dan huruf kecil, case sensitive).
Sudah mas,.. tapi masih error dengan muncul pesan yang sama. hm.. sy bisa minta sourcenya ga mas, langsung dari CI nya..
thanks
Ok, sudah saya upload. Silakan unduh di link ini.
alamat u/ jalaninnya : http://localhost/ci-excel/index.php/baca_excel
akhirnya jalan juga… thx ya mas
sama-sama
Breh.. kalau baca format date nya gmana?
Eh udah bisa ketak…
)
$aData = $this->spreadsheet_Excel_Reader->createDate($data['cells'][$i][$j]);
$dDate = date(‘Y-m-d’, $aDateData[1]);
echo $dDate;
Jadi malu ih.. tanya dan jawab sendiri…
Ywdh.. Thanks dah
thx mas!!!
sip..
trims a lot..
Mas muncul eror kayak gini:
Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in C:\Inetpub\wwwroot\ci-excel\baca_excel.php on line 27
Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in C:\Inetpub\wwwroot\ci-excel\baca_excel.php on line 27
dan di line 27 kode phpnya adalah:
echo “\””.$data['cells'][$i][$j].”\”,”;
Saya persis ngopi kode mas yang ada diatas.
Gimana dong mas solusinya…
Makasih.
klw di kopas dan langsung dijalanin memang ada error karena ada ( ” ) yag harus diubah menjadi ( ” ), perhatikan walau sama2 bentuk kutip tapi bedakan? dimana kuitp yg error miring ke kiri. nah itu dianggap error oleh php. harus diedit dulu menjadi ( ” ).
Untuk lebih gampangnya, download aja skrip lengkapnya di link ini : http://sites.google.com/site/kohaci/berkas/ci-excel.rar?attredirects=0
Cheers.
Great post
Sesuai persis dengan yang saya butuhkan …
Thxs a lot
Ada yg tahu nggak, kenapa kalo baca cell yg berisi link cell, tidak dapat di tampilkan. Contohnya : cell B2 berisi “=B10″, kalo kita baca cell B2 selalu isi nya blank, yg seharusnya “=B10″.
wah mantap mas.. thx for tutornya
Wah terimakasih ya,,,kebetulan saya lagi butuh banget:
tapi ko muncul error ya??
Fatal error: Class ‘Controller’ not found in C:\xampp\htdocs\iin\ci-excel\public\upload\baca_excel.php on line 2
mohon pencerahannya,,,
@iin :
folder public/upload/ untuk menyimpan file excel-nya , sedangkan file baca_excel.php disimpan di system/application/controllers , sesuai dengan petunjuk Codeigniter.
Untuk lebih jelasnya, silakan download script lengkap saya di link ini : http://sites.google.com/site/kohaci/berkas/ci-excel.rar?attredirects=0
untuk mengakses di localhost, dengan url => http://localhost/ci-excel/
iya bener,sekarang da berhasil ke baca,

terimaksih ya,,,,!
maklum baru belajar!
sekarang tinggal cari cara buat insert ke database mysql.
ada ide or cara yang bagus buat saya?
mas klo dijalanin pake file excel yang ada di paket mank bisa,tp klo saya coba pake file excel saya ko g bisa ya?
katanya:
The filename C:/xampp/htdocs/ci-excel/public/upload/Book2.xls is not readable
mohon bantuannya mas,salahnya dimana ya?
terimakasih,,,,
@iin :
klw insert tergantung tiap-tiap fieldnya, yang penting nilai yang dimasukkan di database ada di variable $data['cells'][$i][$j]
Saya tadi mencoba membuat file baru dari Ms. Excel 2007 (Book1.xls) dengan format Excel 97 – 2003 Workbook (*.xls) dan tidak ada masalah. Mungkin proses penyimpanan ke .xls nya tidak complete …
iya mas bener,sekarang uda bisa kebaca untuk semua file excel,
kmren kesalahannya,dari mysql saya export ke *.xls truz langsung saya coba,ternyata harus dibuka dulu di excel(saya office 2007) lalu di save as lg ke format excel 97-2003,dan ternyata bisa.
sekarang saya masih mencoba insertnya,mudah2an bisa.
terimakasih ya mas,tutorialnya sangat membantu saya.
mas saya sudah nyoba nambahin coding buat inset ke tabel mysql seperti ini:
//********************************
for ($i = 1; $i <= $data['numRows']; $i++) {
for ($j = 1; $j <= $data['numCols']; $j++) {
}
echo $query= "INSERT INTO `bpi`.`specification` (
`Spec_ID` ,
`Diameter` ,
`Tebal` ,
`Panjang` ,
`stock` ,
`Title`
)
VALUES ('
".$data['cells'][$i][1]."','".$data['cells'][$i][2]."','".$data['cells'][$i][3]."','".$data['cells'][$i][4]."','".$data['cells'][$i][5]."'
)";
mysql_query($query) ;
echo "”;
}
}
}
//***************************
//************************************
dan di layar sudah muncul query seperti:
//************************************
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ API 5LA’,’10′,’10′,’70′,’500′ )
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ API 5LB’,’20′,’20′,’15′,’4000′ )
//************************************
logikanya kan itu da bener ya,tp ko g mau masuk ke tabel ya?
koneksi ke database jg da saya atur ko mas,seperti:
//***************************
$status=mysql_connect(“localhost”,”root”,”");
mysql_select_db(“bpi”);
//*****************
maaf ya mas nanya terus,,,?

baru belajar nich!
mohon bantuannya ya mas?
mas saya sudah nyoba nambahin coding buat inset ke tabel mysql seperti ini:
//********************************
for ($i = 1; $i <= $data['numRows']; $i++) {
for ($j = 1; $j <= $data['numCols']; $j++) {
}
echo $query= "INSERT INTO `bpi`.`specification` (
`Spec_ID` ,
`Diameter` ,
`Tebal` ,
`Panjang` ,
`stock` ,
`Title`
)
VALUES ('
".$data['cells'][$i][1]."','".$data['cells'][$i][2]."','".$data['cells'][$i][3]."','".$data['cells'][$i][4]."','".$data['cells'][$i][5]."'
)";
mysql_query($query) ;
echo "”;
}
}
}
//***************************
//************************************
dan di layar sudah muncul query seperti:
//************************************
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ API 5LA’,’10′,’10′,’70′,’500′ )
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ API 5LB’,’20′,’20′,’15′,’4000′ )
//************************************
logikanya kan itu da bener ya,tp ko g mau masuk ke tabel ya?
koneksi ke database jg da saya atur ko mas,seperti:
//***************************
$status=mysql_connect(“localhost”,”root”,”");
mysql_select_db(“bpi”);
//*****************
maaf ya mas nanya terus,,,?

baru belajar nich!
mohon bantuannya ya mas?
mas saya sudah nyoba nambahin coding buat insert ke tabel,
codingnya kaya’ gini:
for ($i = 1; $i <= $data['numRows']; $i++) {
for ($j = 1; $j <= $data['numCols']; $j++) {
//echo "\"".$data['cells'][$i][$j]."\",";
}
echo $query= "INSERT INTO `bpi`.`specification` (
`Spec_ID` ,
`Diameter` ,
`Tebal` ,
`Panjang` ,
`stock` ,
`Title`
)
VALUES ('
".$data['cells'][$i][1]."','".$data['cells'][$i][2]."','".$data['cells'][$i][3]."','".$data['cells'][$i][4]."','".$data['cells'][$i][5]."'
)";
mysql_query($query) ;
echo "”;
}
}
}
//dan da muncul query kaya’ gini di layar
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ API 5LA’,’10′,’10′,’70′,’500′ )
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ API 5LB’,’20′,’20′,’15′,’4000′ )
//berarti kan logikanya benar ya?tapi ko g bisa masuk ke tabel ya mas?koneksi sudah saya atur juga.
$status=mysql_connect(“localhost”,”root”,”");
mysql_select_db(“bpi”);
//mohon bantuannya ya mas?terimakasih sebelumnya
//mas saya sudah nambahin koding buat insert,dan di query da muncul:
INSERT INTO `bpi`.`specification` ( `Spec_ID` , `Diameter` , `Tebal` , `Panjang` , `stock` , `Title` ) VALUES (‘ gas’,’20′,’10.2′,’2.8′,’200′ )
//logikaya kan da bener ya?tapi ko g mau masuk ke tabel ya mas?
di koneksi da saya setting juga:
$status=mysql_connect(“localhost”,”root”,”");
mysql_select_db(“bpi”);
mohon bantuannya ya mas,kurangnya dimana ya mas?
ini codingnya mas:
for ($i = 1; $i <= $data['numRows']; $i++) {
for ($j = 1; $j <= $data['numCols']; $j++) {
}
echo $query= "INSERT INTO `bpi`.`specification` (
`Spec_ID` ,
`Diameter` ,
`Tebal` ,
`Panjang` ,
`stock` ,
`Title`
)
VALUES ('
".$data['cells'][$i][1]."','".$data['cells'][$i][2]."','".$data['cells'][$i][3]."','".$data['cells'][$i][4]."','".$data['cells'][$i][5]."'
)";
echo mysql_query($query) ;
echo "”;
}
}
}
Coba query sql-nya diganti :
Asumsi saya :
- ada 6 nama field (kolom) yg dimasukkan sedangkan value yg tersedia cuma ada 5, jadi dihapus Spec_ID karena sepertinya auto increment .
- Semua field kecuali Title adalah integer, jadi saya pindahkan value gas u/ dimasukkan ke Title karena varchar.
Coba aja
iya mas bener,ternyata saya kurang teliti,saya pikir sudah pas,
td saya tambah satu lagi:
Querynya jadi:
“INSERT INTO `bpi`.`specification` (
`Spec_ID` ,
`Diameter` ,
`Tebal` ,
`Panjang` ,
`stock` ,
`Title`
)
VALUES (‘
“.$data['cells'][$i][1].”‘,’”.$data['cells'][$i][2].”‘,’”.$data['cells'][$i][3].”‘,’”.$data['cells'][$i][4].”‘,’”.$data['cells'][$i][5].”‘,’
“.$data['cells'][$i][6].”‘
)”;
alhamdulillah uda bisa,terimakasih banyak ya mas?sekarang tugas saya sudah selesai,mas baik banget,udah ngasih tutorial,masih mau ngasih solusi dari apa yang saya g’ bisa.
saya g’ bisa balas apa2 mas, saya balas dengan doa aja ya mas,mudah2an Allah memberikan kemudahan dalam segala urusan mas.
tutorial ini sangat penting buat saya,
terimakasih….
Thank you bro. Niatnya cari PHP Excel reader aja. Eh ternyata dapat yang sekaligus buat CI juga, dan kebetulan gue pakai CI
.
Komplit deh, ngga perlu coba-coba lagi.
ijin bookmark gan
mas, kalo file excel nya dari folder yang lain gimana mas browsenya?
@ucrit :
asalkan tetap dalam directory root-nya (kalau di xampp -> dalam folder htdocs tidak masalah.
Contoh : saya punya file data1.xls yang saya simpan di folder data , folder “data” terletak di dalam folder “htdocs”, kalau dibrowse file data1.xls terletak di :
htdocs/data/data1.xls .
ntar diedit kode di atas bagian $file menjadi :
$file = “$_SERVER['DOCUMENT_ROOT']./data/data1.xls” ;
folder “htdocs” gak perlu ditulis karena sudah didefiniskan oleh $_SERVER['DOCUMENT_ROOT']
semoga terjawab.
kalo pake sistim uplaod, milih data excelnya gimana bro ?
jadi file xls nya ada di lokal komputer kita…
@herman :
Logikanya : upload file excel dari lokal ke server sehingga masuk ke server, dari server kemudian file excel tersebut (yang telah masuk ke server) diproses.
CMIIW.
kasih contohnya pliz (ngarep)
@herman :
silakan download di link ini
bro…thanks banget sample nya…
sample nya emang cuman sampe abis proses upload, kemudian nongol :
“Array”
trus gue cek di public/upload file nya gak ada bro…
Bro…satu lagi
sekalian contoh masukin ke database…
upload –> insert ke database
trus ama sekalian no rekening BCA loe ya…
thanks banget sebelumnya…
@Herman kalau hasilnya array berarti gagal untuk proses upload. echo $error ganti jadi print_r($error); (file baca_excel.php baris 29). maap ikut nimbrung…
tq ya kohaci untuk tutorial nya
ngbantu banged ^_^
[...] dulu gimana upload+baca file excel di CI. setelah googling kesana-sini akhirna mendarat di site nya kohaci (ngebahas excel di CI) terus di sedot deh ilmu [...]
@adhie : thanx udah dibantu jawab
waw.. membantu banget mas
@adhi : bro, boleh minta file sample yang sudah bisa insert ke database ? *___^ masih blom nemu nich cara nginsertnya
@herman :
contoh samplenya bisa didownload di sini : https://sites.google.com/site/kohaci/berkas/ci-exceldb.rar?attredirects=0&d=1
file contoh xls ada di data.xls dan databasenya ci_excel.sql, perhatikan : beda format excel beda lagi format table databasenya.
@kohaci :
thanks banget bro, sudah di kasih sample… gue coba oprek oprek…
sukses dan tidaknya gue belajar, nanti tak kabarin
ini bisa digunakan di php 5.3.0 ke atas ngak mas…library ane sebelumnya gagal karna pake fungsi split
thanks
@ojie : saya pakai php 5.3.1 dan bisa.
bro aye udah nyoba nih, and udah ganti echo $error ganti jadi print_r($error); tp tetep aja tuh array nya nongol.
@aceng :
ini tentang pertanyaan @Herman yang dijawab @adhie ya?, bisa ditunjukin gak kodenya seperti apa?
makasih mas infonya. ada yg sy mw tanya. kl utk update data pake sistem upload gmn y. tlg pencerahanny y mas. makasihhhh.
@datuck :
ini sama dengan pertanyaan @herman :
silakan download contoh kodenya di sini
hehe miss nih mas. mksd sy kl utk update data di DB menggunakan upload file xls gmn y. jd isi dr tabel tersebut mw di update dr file xls. kl yg insert DB dr file xls kan udh bs tuh. btw makasihh jwbnnya mas
@datuck
tinggal ubah fungsi (sql) insert jadi update?
Kereeennn… makasih pelajarannya om, bener2 mencegah rambut jadi ubanan, sempet mumet bolak balik error non object mulu waktu masukin library spreadsheet reader ini :p
wah tank’s langsung bisa, awalnya sih gak muncul setelah di unduh file contohnya langsung bisa di adaptasi dengan baik,.. tank’s banget…
thx. mas atas tutorialnya and bimbingan yang telah diberikan pada coment-coment sebelumnya, ane lagi cari-cari cara seperti ini. thx ya, ntar klo ada kesulitan mohon bantuannya.
mas, saya hendak bertanya.
bagaimana cara validasi untuk header file excel yang di upload, agar sama dengan header pada database?
(bila tidak sama akan error). misal header pada database : No, Nama, Alamat
saya sudah bikin dan berhasil, tapi ada 1 kelemahan. Pada saat saya upload file excel sembarang dengan header yang sama dengan database namun berbeda urutannya (misal : Nama, Alamat, No), file tersebut tetap ter upload dengan sukses, hanya saja salah karna urutannya kacau.
terima kasih sebelumnya…
@rara :
pertanyaan Anda belum pernah saya implemetasikan karena selama ini saya selalu membuat export xls ke database dengan format excel yang telah disepakati. yang mana format menandakan rows dan kolomnya sesuai dengan sistem , jadi sistem gak perlu mencari lagi.
kalau secara logic menurut saya. tetap Anda definikan rows mana yang kolom2nya dijadikan header. kemudian tiap-tiap header dimatch di field (header) database . yang oke dimatch, header di excel diambil rows di bawahnya (masih satu kolom) yang isinya itulah diambil untuk dimasukkan di database dengan header (field) yang sama.
CMIIW.
Mas,maaf telat nanyanya.
soalnya baru baca postingan mas,
mas saya udh download link yg mas kasih u/insert ke database bwt mas herman,
tp ko saya masih nongol array aj ya?
mohon bantuannya.
Mas,,,mau tanya nih…
itu kan untuk read excel
writing atau generate excel nya gimana ya..?
@una :
cara kasar coba seperti ini, bikin halaman html __ tapi ektensi .php ya.. (kalau bisa isinya tables). trus di atas tag <html>
tambahkan :
< ?php
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=file_excel.xls');
header("Content-Transfer-Encoding: binary ");
?>
<html>
..
</html>
eksekusi di browser.
Mas,
untuk syntax php sql servernya ada, apakah php_Reader bisa di pakai untuk sql server
haturnuhun sanget kang..
salam kenal
Mas…Aq maw tanya…
btw libraris excel reader ni bisa baca file “.xls” yang spreadsheetnya dikasih password ndak ??
mohon pencerahannya..
Mkasih sbelumnya..’^^
@ridho : contoh di atas pure PHP, belum ada hubungannya dengan SQL server atau database lainnya. masalah di database ada di datanya, bukan library-nya.
@andris : tidak bisa jawab, karena saya belum mencoba.
thanks ea mas,,,di coba dulu^^