[Contoh] Cara Mengexport Data SQL ke File Excel 2007 ( xlsx ) dari MySQL dengan PHP

Berdasarkan komentar saudara Dahlan di https://blogit.bimosaurus.com/2012/04/09/contoh-3-membuat-laporan-export-data-dari-mysql-ke-excel-terencoding-dengan-php-no-pear, maka saya coba paparkan tentang melakukan export konversi data dari SQL ke Excel 2007 dengan menggunakan PHP. Sehingga data yang berasal dari SQL dapat di download ke dalam bentuk Excel 2007

STRUKTUR XLSX / Excel 2007

Jika kita periksa sebuah file excel 2007 adalah sebuah file berformat kompresi zip. Jika anda rename, mengganti extensi file xlsx dengan zip, dan anda extract ke suatu tempat, maka file tersebut akan berisi beberapa direktori dan file berformat xml. Ya, Microsoft Office 2007 memang merancang format Office menjadi format yang mudah dikembangkan terutama untuk mendukung DotNet dan networking.

Lantas, apakah kita akan gunakan koding PHP bertele-tele untuk membuat aplikasi untuk memodifikasi XML tersebut? Untuk hal itu, kita tidak perlu koding sendiri, hanya perlu belajar dan menggunakan sebuah fungsi dari http://www.phpexcel.net/ atau http://phpexcel.codeplex.com/. Silakan download paket aplikasi fungsi PHP-Excel tersebut, dan extract dalam direktori DocumentRoot yang anda gunakan. Kira-kira struktur data akan berformat seperti demikian :

1.7.6/changelog.txt

1.7.6/Classes/

1.7.6/Documentation/

1.7.6/install.txt

1.7.6/license.txt

1.7.6/Tests/

Kita hanya membutuhkan sesuatu di dalam directori Classes. Untuk kasus yang saya pakai, saya melakukan pengkopian direktori Classes ke aplikasi web yang saya butuhkan menjadi

{direktori_aplikasi}libs/phpexcel/

 

BAGAIMANA MENGEKSPOR DATA KE DALAM XLSX?

Berikut satu script aplikasi PHP untuk melakukan Export ke dalam XLSX

 


getProperties()->setCreator("Bimosaurus");
$excel->getProperties()->setLastModifiedBy("Bimosaurus");
$excel->getProperties()->setTitle("Coba");
$excel->removeSheetByIndex(0);


$sheet = $excel->createSheet();
$sheet->setTitle('sheet_1');
 $sheet->setCellValue("A1", "Kolom Satu");
 $sheet->setCellValue("B1", "Kolom Dua");
 $sheet->setCellValue("C1", "Kolom Tiga");
 $sheet->setCellValue("D1", "Kolom Empat");
 $sheet->setCellValue("E1", "Kolom Lima");
 $sheet->setCellValue("F1", "Kolom Enam");

 $sheet->setCellValue("A2", "Isi Satu");
 $sheet->setCellValue("B2", "Isi Dua");  
 $sheet->setCellValue("C2", "Isi Tiga");
 $sheet->setCellValue("D2", "Isi Empat"); 
 $sheet->setCellValue("E2", "Isi Lima"); 
 $sheet->setCellValue("F2", "Isi Enam");
 
 $writer = new PHPExcel_Writer_Excel2007($excel);
 $writer->save("excel.xlsx");
 
 
?>
Your File in : Here

Cobalah anda lakukan dalam percobaan anda. Nah, sekarang bagaimana apabila kita akan melakukan pengambilan data dari MySQL Server dengan PHP dan direstore ke dalam XLSX?

Berikut satu contoh programnya di bawah ini. Saya masih menggunakan table lama saya yaitu tabel pegawai dari database kepegawaian.

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

getProperties()->setCreator("Bimosaurus");
$excel->getProperties()->setLastModifiedBy("Bimosaurus");
$excel->getProperties()->setTitle("Data Pegawai PT Anu");
$excel->removeSheetByIndex(0);


$sheet = $excel->createSheet();
$sheet->setTitle('sheet_1');
 $sheet->setCellValue("A1", "NIP");
 $sheet->setCellValue("B1", "Nama");
 $sheet->setCellValue("C1", "Honor");
 $sheet->setCellValue("D1", "Status Ambil");


$sql = "SELECT * FROM `pegawai`";
$q = mysql_query( $sql );
$i = 2; //Dimulai dengan baris ke dua, baris pertama digunakan oleh titel kolom
while( $r = mysql_fetch_array( $q ) ){
   $sheet->setCellValue( "A" . $i, $r['nip'] );
   $sheet->setCellValue( "B" . $i, $r['nama'] );
   $sheet->setCellValue( "C" . $i, $r['honor'] );
   $sheet->setCellValue( "D" . $i, $r['status_ambil'] );
   $i++;
}


 $writer = new PHPExcel_Writer_Excel2007($excel);
 $writer->save("$datetime.xlsx");
 
 
?>
Your File in : Here

Nah bandingkan juga penulisan format export ke kolom excel, dengan artikel lalu https://blogit.bimosaurus.com/2012/04/09/contoh-3-membuat-laporan-export-data-dari-mysql-ke-excel-terencoding-dengan-php-no-pear. Pastikan juga bahwa direktori tujuan Export file tersebut, writeable untuk Webserver anda.

Selamat mencoba, silakan melakukan respon jika perlu direspon. Saya siapkan juga satu artikel untuk pembacaan file excel 2007 untuk diupload ke dalam webserver dan akan terkonversi menjadi SQL database. Segera.

[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

[Contoh 2] Membuat Laporan Export Data dari MySQL ke Excel terencoding dengan PHP (no-pear)

Jika dalam posting lalu https://blogit.bimosaurus.com/2012/04/09/contoh-1-membuat-laporan-export-data-dari-mysql-ke-excel-dengan-php-no-pear/ kita sudah belajar menggunakan php untuk melakukan export ke dalam file excel yang datanya diambil dari database, namun ternyata proses yang kita pelajari tersebut masih terdapat kekurangan. Kekurangannya yaitu bahwa data excel yang dihasilkan tidak terencoding dengan baik sebagaimana layaknya file excel. Excel yang dihasilkan hanyalah file text dalam bentuk table, yang disimpan sebagai xls atau excel spreadsheet. Untuk membuat exporting data dalam bentuk excel yang sebenarnya maka perlu tools yang berfungsi mengolah encoding data cell dan column ke dalam excel encoding sehingga data akan dapat di download dalam format excel. Dalam PHP-PEAR, fasilitas upload download excel ini jelas telah ada. Tutorial penggunaan PEAR menyusul. Kali ini kita akan belajar menggunakan fasilitas : php_writeexcel-0.3.0.tar.gz yang telah saya siapkan di https://blogit.bimosaurus.com/files/php_writeexcel-0.3.0.tar.gz.

Extractlah file tersebut ke dalam direktori yang anda suka. Kalau saya lebih suka memasukkan segala fasilitas ini ke dalam direktori libs. Sehingga akan terbentuk libs/php_writeexcel-0.3.0 . Untuk contoh scripting menggunaan php_writeexcel ini dasarnya adalah sebagai berikut :

 

 


require_once "libs/php_writeexcel-0.3.0/class.writeexcel_workbook.inc.php";
require_once "libs/php_writeexcel-0.3.0/class.writeexcel_worksheet.inc.php";

$fname = tempnam("/tmp", "namafile.xls"); //membuka sebuah file baru diletakkan dalam /tmp
$workbook = &new writeexcel_workbook($fname); //workbook diberinama
$worksheet = &$workbook->addworksheet(); //nambah worksheet

//tulis

$worksheet->write(0, 0,  "JUDUL diletakkan di kolom 1");
$worksheet->write(2, 0,  "title baris 3 kolom 1");
$worksheet->write(2, 1,  "title baris 3 kolom 2");
$i = 3;
while($i <= 10){
$kol = $i+1; // karena nomer kolom pertama adalah 0, maka $kol adalah 0+1
   $worksheet->write($i,0,"Ini Baris $kol Kolom ke 1");
   $worksheet->write($i,1,"Ini Baris $kol Kolom ke 2");
$i++;
}


$workbook->close();

header("Content-Type: application/x-msexcel; name=\"namafile.xls\"");
header("Content-Disposition: inline; filename=\"namafile.xls\"");
$fh=fopen($fname, "rb"); //membuka file namafile.xls , membacanya dan siap untuk mengolah dalam bentuk biner
fpassthru($fh); //menuangkan data yang ada di buffer
unlink($fname); //setelah terdownload, hapus file


Contoh data ini dapat dilihat di https://blogit.bimosaurus.com/demo/export1.php. Untuk posting selanjutnya akan dicoba menuangkan data MySQL ke bentuk XLS MS Excel.

Semoga Berguna