Script PHP untuk Membuat Report Format MS. Excel

Script PHP untuk Membuat Report Format MS. Excel
Satu lagi tutorial persembahan dari blog.rosihanari.net yang mudah-mudahan berguna bagi para web programmer. Tutorial ini adalah bagaimana membuat script PHP untuk menghasilkan file report dalam format MS. Excel.
Apa menariknya report dalam format MS. Excel? dengan report berformat MS. Excel memungkinkan untuk dilakukan pengolahan lagi pada data report tersebut. Sebagai contoh, report tentang data nilai mahasiswa dan status kelulusannya pada matakuliah tertentu. Apabila report yang dihasilkan berupa MS. Excel, maka memungkinkan untuk pengolahan lebih lanjut terhadap report tersebut menggunakan perintah-perintah dalam MS. Excel, seperti menghitung jumlah mahasiswa yang lulus maupun tidak lulus, bahkan dalam bentuk prosentasenya.

Nah… kita akan coba membuat script PHP untuk menghasilkan report dalam format MS. Excel ini, dengan mengambil studi kasus lagi-lagi tentang nilai matakuliah mahasiswa. Report yang akan dihasilkan berupa daftar mahasiswa (NIM dan Nama) yang mengambil matakuliah, nilai yang diperoleh, serta status kelulusannya (LULUS/TIDAK LULUS). Untuk menentukan kelulusan, misalnya diambil policy jika nilainya 60 ke atas maka LULUS, jika kurang dari 60 maka TIDAK LULUS. Untuk data mentah dari report ini diambil dari database MySQL.
OK… terlebih dahulu kita siapkan tabel dan recordnya.
CREATE TABLE nilaimhs(
  nim varchar(10),
  namaMhs varchar(30),
  nilai int(11),
  PRIMARY KEY(nim)
)
INSERT INTO nilaimhs VALUES
('M0197001', 'Faza Fauzan Kh.', 80),
('M0197002', 'Dwi Amalia Fitriani', 75),
('M0197003', 'Rosihan Ari Yuana', 45),
('M0197004', 'Nada Hasanah', 83),
('M0197005', 'Muh. Ahsani Taqwim', 90);
Setelah tabel dan record sudah siap, let’s write a PHP script. Ini dia scriptnya…
// nama file

$namaFile = "report.xls";

// Function penanda awal file (Begin Of File) Excel

function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

// Function penanda akhir file (End Of File) Excel

function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

// Function untuk menulis data (angka) ke cell excel

function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

// Function untuk menulis data (text) ke cell excel

function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}

// header file excel

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 untuk nama file
header("Content-Disposition: attachment;
        filename=".$namaFile."");

header("Content-Transfer-Encoding: binary ");

// memanggil function penanda awal file excel
xlsBOF();

// ------ membuat kolom pada excel --- //

// mengisi pada cell A1 (baris ke-0, kolom ke-0)
xlsWriteLabel(0,0,"NO");               

// mengisi pada cell A2 (baris ke-0, kolom ke-1)
xlsWriteLabel(0,1,"NIM");              

// mengisi pada cell A3 (baris ke-0, kolom ke-2)
xlsWriteLabel(0,2,"NAMA MAHASISWA");

// mengisi pada cell A4 (baris ke-0, kolom ke-3)
xlsWriteLabel(0,3,"NILAI");   

// mengisi pada cell A5 (baris ke-0, kolom ke-4)
xlsWriteLabel(0,4,"STATUS KELULUSAN"); 

// -------- menampilkan data --------- //

// koneksi ke mysql

mysql_connect("localhost", "root", "root");
mysql_select_db("data");

// query menampilkan semua data

$query = "SELECT * FROM nilaimhs";
$hasil = mysql_query($query);

// nilai awal untuk baris cell
$noBarisCell = 1;

// nilai awal untuk nomor urut data
$noData = 1;

while ($data = mysql_fetch_array($hasil))
{
   // menampilkan no. urut data
   xlsWriteNumber($noBarisCell,0,$noData);

   // menampilkan data nim
   xlsWriteLabel($noBarisCell,1,$data['nim']);

   // menampilkan data nama mahasiswa
   xlsWriteLabel($noBarisCell,2,$data['namaMhs']);

   // menampilkan data nilai
   xlsWriteNumber($noBarisCell,3,$data['nilai']);

   // menentukan status kelulusan
   if ($data['nilai'] >= 60) $status = "LULUS";
   else $status = "TIDAK LULUS";

   // menampilkan status kelulusan
   xlsWriteLabel($noBarisCell,4,$status);

   // increment untuk no. baris cell dan no. urut data
   $noBarisCell++;
   $noData++;
}

// memanggil function penanda akhir file excel
xlsEOF();
exit();

?>
Apabila script di atas dijalankan pada browser, maka browser akan menampilkan kotak dialog untuk mendownload file MS. Excel sebagai outputnya. Gambar berikut ini adalah screen shot isi file excel yang telah didownload.

Mudah bukan cara membuatnya?
Silakan isi komentar di bawah ini apabila ada pertanyaan dan diskusi seputar artikel ini.

Membuat Script PHP Import Data MS. Excel Ke MySQL

Membuat Script PHP Import Data MS. Excel Ke MySQL
Free Software
Sebenarnya topik tentang cara membuat script import data excel ke mysql sudah banyak ditanyakan rekans pengunjung setia blog ini. Namun… maaf baru sempat kali ini membuat artikelnya :-)
Mengapa script import data Excel ke MySQL ini perlu dibuat? ya.. karena tool-tool seperti phpMyAdmin belum mendukungnya. Kalau tidak salah phpMyAdmin hanya mendukung import data dalam bentuk format SQL maupun CSV. Sebenarnya ada sih tool yang mendukung import data dalam format Excel, seperti Navicat dan SQLyog. Namun keduanya adalah tool berbayar :-(

Nah… untuk membuat script import data Excel ke MySQL ini nanti kita akan memanfaatkan class PHPExcelReader yang dibuat oleh Vadim Tkachenko. Class ini sebenarnya hanya diperuntukkan untuk membaca file Excel saja, namun dengan sedikit modifikasi dan pengembangan dapat kita gunakan untuk melakukan import data Excel ke MySQL.
Oya… file Excel yang bisa dibaca oleh class PHPExcelReader ini untuk sementara hanya yang di bawah MS. Office 2007 atau Office 97-2003 saja. Dengan kata lain class ini tidak bisa digunakan untuk membaca file Excel yang berekstensi (*.xlsx). Oleh karena itu pastikan file Excel yang akan Anda import berekstensi *.xls.
Sebelum kita membuat script import datanya, silakan download terlebih dahulu class PHPExcelReader nya di bawah ini
Download Class
Selanjutnya, kita akan membuat script import datanya. Dalam script yang akan kita buat ini, class tersebut nantinya akan kita includekan di dalamnya.
Untuk contoh kasus yang akan kita pilih di sini adalah import data mahasiswa. Berikut ini struktur tabel MySQL nya.
1.CREATE TABLE `mhs` (
2.  `nim` varchar(10),
3.  `namamhs` varchar(30),
4.  `alamat` text,
5.  PRIMARY KEY  (`nim`)
6.)
Kemudian andaikan kita memiliki file data Excel seperti gambar di bawah ini
Script PHP Import Excel ke MySQL
Dalam proses import data nanti, kita akan menggunakan bentuk form upload file. Oleh karena itu, pertama kita buat form uploadnya sbb:
import.php
1.<h1>Import Data Asramah1>
2. 
3.<form method="post" enctype="multipart/form-data" action="proses.php">
4.Silakan Pilih File Excel: <input name="userfile" type="file">
5.<input name="upload" type="submit" value="Import">
6.form>
Selanjutnya, kita buat script untuk proses upload dan import datanya. Oya… meskipun kita menggunakan form upload file, namun file Excel yang kita upload tersebut tidak akan tersimpan di server secara permanen namun hanya bersifat temporary yang otomatis akan terhapus setelah proses import datanya selesai.
proses.php
01.
02.// menggunakan class phpExcelReader
03.include "excel_reader2.php";
04. 
05.// koneksi ke mysql
06.mysql_connect("dbHost", "dbUser", "dbPass");
07.mysql_select_db("dbname");
08. 
09.// membaca file excel yang diupload
10.$data = new Spreadsheet_Excel_Reader($_FILES['userfile']['tmp_name']);
11. 
12.// membaca jumlah baris dari data excel
13.$baris = $data->rowcount($sheet_index=0);
14. 
15.// nilai awal counter untuk jumlah data yang sukses dan yang gagal diimport
16.$sukses = 0;
17.$gagal = 0;
18. 
19.// import data excel mulai baris ke-2 (karena baris pertama adalah nama kolom)
20.for ($i=2; $i<=$baris; $i++)
21.{
22.  // membaca data nim (kolom ke-1)
23.  $nim = $data->val($i, 1);
24.  // membaca data nama (kolom ke-2)
25.  $nama = $data->val($i, 2);
26.  // membaca data alamat (kolom ke-3)
27.  $alamat = $data->val($i, 3);
28. 
29.  // setelah data dibaca, sisipkan ke dalam tabel mhs
30.  $query = "INSERT INTO mhs VALUES ('$nim', '$nama', '$alamat')";
31.  $hasil = mysql_query($query);
32. 
33.  // jika proses insert data sukses, maka counter $sukses bertambah
34.  // jika gagal, maka counter $gagal yang bertambah
35.  if ($hasil) $sukses++;
36.  else $gagal++;
37.}
38. 
39.// tampilan status sukses dan gagal
40.echo "

Proses import data selesai.

";
41.echo "Jumlah data yang sukses diimport : ".$sukses."
"
;
42.echo "Jumlah data yang gagal diimport : ".$gagal."";
43. 
44.?>
Setelah script di atas dijalankan, maka berikut ini isi tabel mhs setelah proses import datanya
Script PHP Import Excel ke MySQL
Nah.. mudah bukan?? Oya.. pastikan class phpExcelReader tersebut terletak dalam folder yang sama dengan kedua script di atas.
Dalam membuat file Excel, Anda tetap bisa menggunakan Office 2007 asal ketika menyimpan filenya, pastikan formatnya adalah Excel 97-2003 worksheet (pilih Save As Type: Excel 97-2003 Worksheet).
Semoga artikel ini bermanfaat…

Ref : http://blog.rosihanari.net/membuat-script-php-import-data-ms-excel-ke-mysql