xls2php

XLS adalah format untuk file spreedsheet Ms Excel yang merupakan format Office 2003 atau yang lebih tua(untuk 2007, xlsx). Cara ini mungkin sangat berguna untuk menginput data yang jumlahnya sangat banyak, terlebih apabila data tersebut ada sudah di dalam file Excel.

Kebetulan gw lagi dapat proyek untuk sebuah perusahaan yang biasanya menggunakan XLS untuk mencatat katalog barang mereka.

Berikut ini adalah sebuah cara untuk dapat mengambil value dari Excel dengan bantuan sebuah script bernama PHP-ExcelReader(Bisa di dwonload dari sini, atau langsung ke SourceForge.org untuk mendapat rilis terakhirnya).

Sayangnya entah kenapa, Script ini cacat dari creatornya dan buat gw harus seharian berkutik di depan komputer  ~x(  Sampai akhirnya gw menemukan jalan keluarnya.

Dalam README yang disertakan, disana hanya tertulis bukalah/execute file: “example.php” tetapi Kira-kira beginilah kisahnya apabila kalian membukanya langsung:

Oke untuk yang sudah agak biasa dengan PHP pasti tahu bahwa pada file “reader.php” dalam folder “Excel” tidak menemukan file “OLERead.php”. Let’s see apa yang ada di folder Excel:

Kita lihat disana memang tidak ada file bernama “OLERead.php” yang ada hanyalah file “OLERead.inc”. Untuk memper baikinya, Ubah nama “oleread.inc” menjadi “OLERead.inc”

Kemudian buka file “reader.php”, lihat line 31, disana Include pathnya salah kaprah…

Ubah menjadi :

Tinggal save file, kemudian close…. Then next Problem is:

Yap file contoh(jxlrwtest.xls) tidak bisa dibuka(on my case Excel 2007)… OMG… Cara mudah adalah Buat sebuah file excel baru untuk  dibaca dan beri nama sama(bila ga mau repot), atau ganti nama file di dalam file “example.php”.

Dan hasilnya pun keluar dan juga next error tentunya:

Kolom tanggal disana akan di convert ke sebuah nilai yang tidak dapat dibaca manusia… Ini terjadi apabila Tanggal menggunakan beberapa type format:

Sebuah, saran gunakan custom formating “dd-mmm-yy” agar dapat dibaca.

BUT WAIT… apakah kalian melihat sesuatu yang aneh?
YES… tanggal dari excel akan 1 hari lebih lambat ketimbang yang dibaca oleh PHP. Hal ini juga dialami oleh beberapa pengguna script ini. Cara mengatasinya, bukalah file “reader.php”, sekitar line 968 temukan kode seperti berikut:

    function createDate($numValue)
    {
        if ($numValue > 1) {
            $utcDays = $numValue - ($this->nineteenFour ? SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904 : SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS);
            $utcValue = round(($utcDays+1) * SPREADSHEET_EXCEL_READER_MSINADAY);
            $string = date ($this->curformat, $utcValue);
            $raw = $utcValue;
        } else {
            $raw = $numValue;
            $hours = floor($numValue * 24);
            $mins = floor($numValue * 24 * 60) - $hours * 60;
            $secs = floor($numValue * SPREADSHEET_EXCEL_READER_MSINADAY) - $hours * 60 * 60 - $mins * 60;
            $string = date ($this->curformat, mktime($hours, $mins, $secs));
        }

        return array($string, $raw);
    }

Terutama di sekitar line 970 disana terdapat kode bertulisan:

$utcValue = round(($utcDays+1) * SPREADSHEET_EXCEL_READER_MSINADAY);

Ubah menjadi :

$utcValue = round(($utcDays) * SPREADSHEET_EXCEL_READER_MSINADAY);

Save dan lihat hasilnya

FINISH!!!!

FYI :

Ada cara lain yang lebih mudah untuk menginport data dari XLS yaitu dengan mengconvert file “xls” menjadi vile “csv”. APabila file csv dibuka dengan notepad atau text editor akan menjadi sbb:

Test 1;tgl;name;;
1;10-Feb-09;try;";";q
2;11-Feb-09;yes;";";a
3;12-Feb-09;no;";";a

Dengan demikian Kalian tinggal membuat parsier-nya dengan menggunakan explode atau fungsi PHP lainnya…
Sayangnya Bos mana mau susah-susah nge-save-as sebagai csv segala sebelum dia mo import ke system :D

Enjoy :)

Popularity: 12% [?]

Tagged with:
 

Leave a Reply

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

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>