Monday 13 July 2015

PHP :: Membuat script report php excel dengan content bergambar mengunakan library php-excel


Sebelumnya, kita perlu mengetahui terlebih dahulu apa itu php-excel, php-excel merupakan library opensource yag dikembangkan oleh codeplex dengan alamat situs http://www.codeplex.com/PHPExcel. Untuk menggunakan library php-excel, kita memerlukan beberapa library aktif dalam server php, yaitu :

  • PHP version 5.2.0 atau diatasnya
  • PHP extension php_zip enabled
  • PHP extension php_xml enabled
  • PHP extension php_gd2 enabled (if not compiled in)
Setelah semua kebutuhan terpenuhi, sekarang coba kita lakukan langkah - langkah berikut :
Pada contoh kali ini kita akan mencoba membuat sebuah kasus report tabel siswa menjadi halaman excel yang memuat gambar logo dari instansi pada file excel tersebut. Harapan kami, dari contoh sederhana ini dapat anda kembangkan menjadi aplikasi yang lebih kompleks sesuai dengan kebutuhan pembaca dalam menyusun sebuah aplikasi
1. Download php-excel
PHP-EXCEL dapat didownload pada alamat berikut : PHP Excel - codeplex
2. Membuat database dan tabel siswa
Pada contoh kali ini, kami membuat contoh tabel dengan struktur sebagai berikut :
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `siswa` (
  `noinduk` varchar(10) NOT NULL,
  `Nama` varchar(50) NOT NULL,
  `Alamat` varchar(150) NOT NULL,
  `TTL` varchar(100) NOT NULL,
  `Email` varchar(50) NOT NULL,
  `Passwd` varchar(32) NOT NULL,
  `Kelas` enum('1','2','3_A','3_S','3_0') NOT NULL,
  `Status` enum('0','1') NOT NULL,
  PRIMARY KEY  (`noinduk`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Adapun contoh struktur database sudah kami sertakan pada contoh aplikasi demo yang terdapat pada link download dibawah.

3. Membuat script koneksi ke database
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$db_host    = 'localhost';
$db_usn     = 'root';
$db_pwd     = 'kutukupret';
$db_name    = 'tutorial';
if($conn=mysql_connect($db_host,$db_usn,$db_pwd)){
    $sel = mysql_select_db($db_name);
}
else{
    echo 'Error in db connection';
}
?>
Sesuaikan setting koneksi database dengan setting yang terdapat pada komputer pembaca
4. Membuat script report
Bagian ini merupakan bagian inti dari pembahasan kita mengenai php-excel. Kami telah melakukan modifikasi pada contoh aplikasi yang disertakan dari codeplex, dengan contoh aplikasi seperti terlihat pada contoh dibawah ini:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
date_default_timezone_set('Asia/Jakarta');
/** Include PHPExcel */
require_once 'Classes/PHPExcel.php';
// Membuat script koneksi
require_once 'db.php';
// Membuat documen excel baru
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
$objPHPExcel = new PHPExcel();
// Set Properti Documen excel yang akan dibuat
echo date('H:i:s') , " Set document properties" , EOL;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                             ->setLastModifiedBy("Maarten Balliauw")
                             ->setTitle("Office 2007 XLSX Test Document")
                             ->setSubject("Office 2007 XLSX Test Document")
                             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                             ->setKeywords("office 2007 openxml php")
                             ->setCategory("Test result file");
                              
//set table header
//Tabel akan kita mulai dari Kolom B10 dan seterusnya
$objPHPExcel->getActiveSheet()->setCellValue('B10', 'No');
$objPHPExcel->getActiveSheet()->setCellValue('C10', 'NIS');
$objPHPExcel->getActiveSheet()->setCellValue('D10', 'Nama');
$objPHPExcel->getActiveSheet()->setCellValue('E10', 'Alamat');
$objPHPExcel->getActiveSheet()->setCellValue('F10', 'T.Tgl lahir');
$objPHPExcel->getActiveSheet()->setCellValue('G10', 'Email');
// Add some data
echo date('H:i:s') , " Menampilkan bebarapa data dari tabel siswa" , EOL;
$query = mysql_query('select * from siswa');
//start data from row 11
$i = 11;
$no= 1;
while($data=mysql_fetch_array($query)){
    $objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $no);
    $objPHPExcel->getActiveSheet()->setCellValue('C'.$i, $data['noinduk']);
    $objPHPExcel->getActiveSheet()->setCellValue('D'.$i, $data['Nama']);
    $objPHPExcel->getActiveSheet()->setCellValue('E'.$i, $data['Alamat']);
    $objPHPExcel->getActiveSheet()->setCellValue('F'.$i, $data['TTL']);
    $objPHPExcel->getActiveSheet()->setCellValue('G'.$i, $data['Email']);
    $i++;
    $no++;
}
//Mengatur lebar cell pada documen excel
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(5);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(20);
// Set sheet yang aktif pada documen excel
$objPHPExcel->setActiveSheetIndex(0);
// Menambahkan file gambar pada document excel pada kolom B2
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Media Kreatif Indonesia');
$objDrawing->setDescription('Logo Media Kreatif');
$objDrawing->setPath('images/logo.jpg');
$objDrawing->setCoordinates('B2');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
echo date('H:i:s') , " Write to Excel2007 format" , EOL;
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
// Echo done
echo date('H:i:s') , " Done writing file" , EOL;
echo 'File has been created in ' , getcwd() , EOL;
Dari script diatas, ada beberapa point penting yang harus kita perhatikan, yaitu :
  1. require_once 'Classes/PHPExcel.php'; Pastikan script PHPExcel.php sesuai dengan path yang sudah kita sebutkan diatas, begitu juga dengan script db.php yang kita gunakan sebagai koneksi
  2. $objPHPExcel->getProperties() Merupakan bagian yang digunakan untuk setting properti documen excel yang akan dibuat. Properti documen akan terlihat seperti pada gambar dibawah ketika mouse diarahkan pada file excel.
  3. $objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $no); Merupakan bagian yang digunakan untuk memasukkan data pada cell excel, dimana perintah tersebut maksudnya : Kolom Bxx, akan di isi dengan data dari variabel $no dan seterusnya
  4. Pada bagian worksheet_drawing, pastikan alamat gambar benar - benar valid, jika alamat gambar tidak sesuai maka script akan menampilkan pesan eror
  5. Pada bagian save documen, $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); file excel akan disimpan sesuai dengan nama script yang kita buat. jika kita hendak membuat nama lain yang tidak sama dengan nama script, kita bisa menggantinya seperti contoh berikut : $objWriter->save('siswa.xlsx');