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.
1.
CREATE
TABLE
nilaimhs(
2.
nim
varchar
(10),
3.
namaMhs
varchar
(30),
4.
nilai
int
(11),
5.
PRIMARY
KEY
(nim)
6.
)
1.
INSERT
INTO
nilaimhs
VALUES
2.
(
'M0197001'
,
'Faza Fauzan Kh.'
, 80),
3.
(
'M0197002'
,
'Dwi Amalia Fitriani'
, 75),
4.
(
'M0197003'
,
'Rosihan Ari Yuana'
, 45),
5.
(
'M0197004'
,
'Nada Hasanah'
, 83),
6.
(
'M0197005'
,
'Muh. Ahsani Taqwim'
, 90);
001.
<?php
002.
003.
// nama file
004.
005.
$namaFile
=
"report.xls"
;
006.
007.
// Function penanda awal file (Begin Of File) Excel
008.
009.
function
xlsBOF() {
010.
echo
pack(
"ssssss"
, 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
011.
return
;
012.
}
013.
014.
// Function penanda akhir file (End Of File) Excel
015.
016.
function
xlsEOF() {
017.
echo
pack(
"ss"
, 0x0A, 0x00);
018.
return
;
019.
}
020.
021.
// Function untuk menulis data (angka) ke cell excel
022.
023.
function
xlsWriteNumber(
$Row
,
$Col
,
$Value
) {
024.
echo
pack(
"sssss"
, 0x203, 14,
$Row
,
$Col
, 0x0);
025.
echo
pack(
"d"
,
$Value
);
026.
return
;
027.
}
028.
029.
// Function untuk menulis data (text) ke cell excel
030.
031.
function
xlsWriteLabel(
$Row
,
$Col
,
$Value
) {
032.
$L
=
strlen
(
$Value
);
033.
echo
pack(
"ssssss"
, 0x204, 8 +
$L
,
$Row
,
$Col
, 0x0,
$L
);
034.
echo
$Value
;
035.
return
;
036.
}
037.
038.
// header file excel
039.
040.
header(
"Pragma: public"
);
041.
header(
"Expires: 0"
);
042.
header("Cache-Control: must-revalidate, post-check=0,
043.
pre-check=0");
044.
header(
"Content-Type: application/force-download"
);
045.
header(
"Content-Type: application/octet-stream"
);
046.
header(
"Content-Type: application/download"
);
047.
048.
// header untuk nama file
049.
header("Content-Disposition: attachment;
050.
filename=
".$namaFile."
");
051.
052.
header(
"Content-Transfer-Encoding: binary "
);
053.
054.
// memanggil function penanda awal file excel
055.
xlsBOF();
056.
057.
// ------ membuat kolom pada excel --- //
058.
059.
// mengisi pada cell A1 (baris ke-0, kolom ke-0)
060.
xlsWriteLabel(0,0,
"NO"
);
061.
062.
// mengisi pada cell A2 (baris ke-0, kolom ke-1)
063.
xlsWriteLabel(0,1,
"NIM"
);
064.
065.
// mengisi pada cell A3 (baris ke-0, kolom ke-2)
066.
xlsWriteLabel(0,2,
"NAMA MAHASISWA"
);
067.
068.
// mengisi pada cell A4 (baris ke-0, kolom ke-3)
069.
xlsWriteLabel(0,3,
"NILAI"
);
070.
071.
// mengisi pada cell A5 (baris ke-0, kolom ke-4)
072.
xlsWriteLabel(0,4,
"STATUS KELULUSAN"
);
073.
074.
// -------- menampilkan data --------- //
075.
076.
// koneksi ke mysql
077.
078.
mysql_connect(
"localhost"
,
"root"
,
"root"
);
079.
mysql_select_db(
"data"
);
080.
081.
// query menampilkan semua data
082.
083.
$query
=
"SELECT * FROM nilaimhs"
;
084.
$hasil
= mysql_query(
$query
);
085.
086.
// nilai awal untuk baris cell
087.
$noBarisCell
= 1;
088.
089.
// nilai awal untuk nomor urut data
090.
$noData
= 1;
091.
092.
while
(
$data
= mysql_fetch_array(
$hasil
))
093.
{
094.
// menampilkan no. urut data
095.
xlsWriteNumber(
$noBarisCell
,0,
$noData
);
096.
097.
// menampilkan data nim
098.
xlsWriteLabel(
$noBarisCell
,1,
$data
[
'nim'
]);
099.
100.
// menampilkan data nama mahasiswa
101.
xlsWriteLabel(
$noBarisCell
,2,
$data
[
'namaMhs'
]);
102.
103.
// menampilkan data nilai
104.
xlsWriteNumber(
$noBarisCell
,3,
$data
[
'nilai'
]);
105.
106.
// menentukan status kelulusan
107.
if
(
$data
[
'nilai'
] >= 60)
$status
=
"LULUS"
;
108.
else
$status
=
"TIDAK LULUS"
;
109.
110.
// menampilkan status kelulusan
111.
xlsWriteLabel(
$noBarisCell
,4,
$status
);
112.
113.
// increment untuk no. baris cell dan no. urut data
114.
$noBarisCell
++;
115.
$noData
++;
116.
}
117.
118.
// memanggil function penanda akhir file excel
119.
xlsEOF();
120.
exit
();
121.
122.
?>
Mudah bukan cara membuatnya?
Silahkan Coba, Semoga Berhasil
Tidak ada komentar:
Posting Komentar