Pada artikel sebelumnya kita sudah pernah membahas bagaimana mengekspor hasil CGridView ke dalam Excel. Tetapi pertanyaannya sekarang adalah mungkinkah kita mengekspor data yang hanya difilter user ke Excel? Tentu saja bisa. Penasaran? Simaklah artikel berikut.
Secara sederhana penulis akan membuat dua halaman di Website. Halaman pertama menampilkan CGridView (sebenarnya kita bisa saja menggunakan EExcelView sebagai CGridView, tetapi demi kesederhanaan lebih baik kita tetap menggunakan CGridView saja). Halaman kedua adalah untuk mengekspor Excel.
Jika Anda belum pernah menggunakan EExcelView, maka baca terlebih dahulu di artikel Computesta untuk mengekspor CGridView ke Excel.
1. Buat Action untuk Menampilkan CGridView
Untuk menampilkan tabel CGridView, kita buat sebuah action. Untuk tutorial ini mari kita buatkan di SiteController, yang terletak di webroot/protected/controllers/SiteController.php. Kita namakan actionTampil(). Tetapi alih-alih menampilkan CGridView saja, kita pasangkan juga sebuah form supaya bisa di-submit ke halaman ekspor Excel. Berikut isi actionTampil()
public function actionTampil() { $model=new Buku('search'); $model->unsetAttributes(); if(isset($_GET['Buku'])) $model->attributes=$_GET['Buku']; $this->render('tampil',array( 'model'=>$model, )); }
Berikut merupakan konten file view di webroot/protected/views/site/tampil.php:
<?php echo CHtml::beginForm(array('site/exportExcel')); ?>
$model = new Buku(); $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider' => $model->search(), 'filter'=>$model, 'columns' => array( 'id', 'judul', 'tahun', 'pengarang.nama', ), )); <?php echo CHtml::submitButton('Export'); ?> <?php echo CHtml::endForm(); ?>
2. Action Untuk Ekspor Excel
Action untuk mengekspor file Excel, kita namakan actionExportExcel(). Action ini juga kita pasangkan di SiteController saja.
public function actionExportExcel() { $model = new Buku(); $model->attributes = $_POST['Buku']; $this->widget('ext.EExcelView', array( 'title'=>'Daftar Buku', 'dataProvider' => $model->search(), 'filter'=>$model, 'grid_mode'=>'export', 'columns' => array( 'id', 'judul', 'tahun', 'nama.pengarang', ), )); }
Nah selesai sudah langkahnya. Sekarang saatnya mencoba. Anda bisa membuka halaman index.php?r=site/tampil, yang akan memunculkan tampilan CGridView plus tombol Submit. Isikan filter di CGridView, lihat hasilnya. Kemudian pastikan kotak filter masih terisi, Anda tekan submit, maka akan muncul file Excel. Silahkan cek file Excel-nya. Sekarang Excel itu hanya menampilkan hasil sesuai filter.
Mau tanya gan,
Kenapa file excel nya ga tampil ya ketika di klik tombol submit
Yang tampil malah grid di web aja
Ini ane posting coding nya
Berikut action nya yang ada di siteController
public function actionTampil()
{
$model = new Mapel(‘search’);
$model->unsetAttributes();
if(isset($_GET['Mapel']))
$model->attributes = $_GET['Mapel'];
$this->render(‘tampil’,array(
‘model’=>$model,
));
}
public function actionExportExcel()
{
$model = new Mapel();
$model->attributes = $_POST['Mapel'];
$this->widget(‘ext.EExcelView’,array(
‘grid_mode’=>’export’,
‘title’=>’Daftar Mapel’,
‘dataProvider’=>$model->search(),
‘filter’=>$model,
‘columns’=>array(
‘id’,
‘nm_matapelajaran’,
‘kelas_id’,
‘jurusan_id’,
‘semester_id’,
),
));
}
dan ini views/site/tampil
widget(‘zii.widgets.grid.CGridView’,array(
‘dataProvider’=>$model->search(),
‘filter’=>$model,
‘columns’=>array(
‘id’,
‘nm_matapelajaran’,
‘kelas_id’,
‘jurusan_id’,
‘semester_id’,
),
));
echo CHtml::submitButton(‘Export’);
echo CHtml::endForm();
?>
Anda harus tambahkan koding bawah ini di bagian EExcelView…
‘grid_mode’=>’export’,
Di tutorial, sudah saya update. Coba cek apakah masih keluar Grid dan bukannya Excel?
sudah gan
coba agan lihat coding saya di atas
saya juga mengalami hal yang sama.. grid_mode udah export,, tpi yg muncul di browser nya,, tanpa css apa2 lagi muncul,, g seperti cgridview yang biasa
saya juga alamin hal yg sama, berhasil dengan cara :
buka file : extensions/EExcelView.php
rubah baris ke 20:
public $libPath = ‘ext.phpexcel.Classes.PHPExcel’;
menjadi :
public $libPath = ‘ext.PHPExcel’;
dengan struktur direktori saya :
protected/extensions/PHPExcel
protected/extensions/EExcelView.php
lupa lagi 1. tambahkan juga file PHPExcel.php pada folder protected/extensions.
jadi struktur direktorinya menjadi :
protected/extensions/PHPExcel
protected/extensions/EExcelView.php
protected/extensions/PHPExcel.php
kok ane coba malah keluar ini ya gan?
Fatal error: Class ‘CLogger’ not found in C:\xampp\htdocs\yii\framework\base\CApplication.php on line 704
Wah, terima kasih atas tutorial ini mas…
Sangat sangat membantu.
Selalu suka baca tutorial dari sini karena step2 nya jelas dan ngga ribet.
Terus share ilmunya ya mas…
Sep, terima kasih juga sudah berkunjung ke blog kami
Jangan lupa di-life fan page kami juga jika merasa bermanfaat…
maaf, mau nanya…
saya kan naroh tombol submit nya di halaman admin…
nah, dihalaman adminkan ada tombol search juga yg sama2 tipenya submit, jadi kan bentrok, saat saya klik tombol search, malah langsung export ke excel, gimana caranya biar 2 tombol itu ga bentrok ya??
makasih sebelumnya…
Normalnya tidak akan bentrok. Karena form search ada di tempat tersendiri. Form export kita juga ada tempat tersendiri. Mungkin koding Silvi ini
< ?php $this->renderPartial(‘_search’,array(
‘model’=>$model,
)); ?>
ikut masuk ke dalam form buatan kita? Kalau iya, silahkan keluarkan koding render itu dari form yang kita buat. Jadi kita buat seperti demikian:
< ?php $this->renderPartial(‘_search’,array(
‘model’=>$model,
)); ?>
< ?php echo CHtml::beginForm(array('site/exportExcel')); ?>
$model = new Buku();
$this->widget(‘zii.widgets.grid.CGridView’, array(
‘dataProvider’ => $model->search(),
‘filter’=>$model,
‘columns’ => array(
‘id’,
‘judul’,
‘tahun’,
‘pengarang.nama’,
),
));
< ?php echo CHtml::submitButton('Export'); ?>
< ?php echo CHtml::endForm(); ?>
Thanks gan tutorialnya
membantu sekali
klo boleh tanya, header nya pengen di bold otomatis gmana caranya y ? jadi pas udah donlot excelnya langsung d print g usah d edit lagi
thx banget gan tutorialnya
Halo Had, sejauh yang saya tahu, saat ini belum bisa. Mungkin harus melakukan perubahan pada file core extensionnya.
terima kasih tutorialnya bos…sangat berguna
Senang bisa membantu agan.
misi gan aku udah bikin persis ama pnya gan tapi ngak bisa ya ni kodenya
//public function actionTampil()
// {
// $model=new Barang(‘search’);
// $model->unsetAttributes();
// if(isset($_GET['Barang']))
// $model->attributes=$_GET['Barang'];
//
// $this->render(‘tampil’,array(
// ‘model’=>$model,
// ));
// }
//
// public function actionExportExcel()
// {
// $model = new Barang();
// $model->attributes = $_POST['Barang'];
//
// $this->widget(‘ext.EExcelView’, array(
// ‘title’=>’Daftar Barang’,
// ‘dataProvider’ => $model->search(),
// ‘filter’=>$model,
// ‘grid_mode’=>’export’,
// ‘columns’ => array(
// ‘idbarang’,
// ‘namabarang’,
// ‘barcode’,
// ‘sn’
// ‘merkbarang’,
// ‘stock’,
// ‘idsatuan0.satuan’,
// ‘tglinput’,
// ‘idjenis0.jenisbarang’,
// ‘idkondisi0.kondisi’,
// ‘idsupplier0.namasupplier’,
// ‘idlokasi0.lokasi’,
// ‘nosurat’,
// ‘keterangan’,
// ),
// ));
//
widget(‘zii.widgets.grid.CGridView’, array(
//’id’=>’barang-grid’,
‘dataProvider’=>$model->search(),
‘filter’=>$model,
//’emptyText’=>’Maaf ,data tidak tersedia’,
//’summaryText’ => ‘ ‘,
‘columns’=>array(
//’id’,
‘idbarang’,
‘namabarang’,
‘barcode’,
‘sn’,
‘merkbarang’,
‘stock’,
// ‘idsatuan0.satuan’,
array(
‘name’=>’idsatuan’,
‘value’=>’$data->idsatuan0->satuan’,
),
‘tglinput’,
//’idlokasi’,
array(
‘name’=>’idlokasi’,
‘value’=>’$data->idlokasi0->lokasi’,
),
//’idjenis’,
array(
‘name’=>’idjenis’,
‘value’=>’$data->idjenis0->jenisbarang’,
),
//’idsupplier0.supplier’,
array(
‘name’=>’idsupplier’,
‘value’=>’$data->idsupplier0->namasupplier’,
),
// //’idkondisi0.kondisi’,
array(
‘name’=>’idkondisi’,
‘value’=>’$data->idkondisi0->kondisi’,
),
‘nosurat’,
‘keterangan’,
),
)); ?>
Aganwati mau export excel bukan?
Kalau berdasarkan pengamatan ane, ini masih pakai CGridView : widget(‘zii.widgets.grid.CGridView’, array(
Sedangkan seharusnya kita pakai Eexcelview harusnya : $this->widget(‘ext.EExcelView’, array(
Oh ya sekedar tambahan aja, penulisan yang benar adalah
$this->widget(‘zii.widgets.grid.CGridView’, array(
Agan kurang “$this->” di situ juga.