Yii Tutorial: Ekspor Ke Excel Sesuai Hasil Filter User
July 5th, 2012, Written by: | Categories: Programming, Tutorial, Yii Framework

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.

More about: , , ,

29 Responses to “Yii Tutorial: Ekspor Ke Excel Sesuai Hasil Filter User”

  1. iwan

    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();
    ?>

    Reply
    • Garry

      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?

      Reply
      • ksk

        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

        Reply
        • adi r

          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

          Reply
        • adi r

          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

          Reply
          • Rahma

            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

  2. Naisa

    Wah, terima kasih atas tutorial ini mas… :D
    Sangat sangat membantu.

    Selalu suka baca tutorial dari sini karena step2 nya jelas dan ngga ribet.

    Terus share ilmunya ya mas… :)

    Reply
    • Garry

      Sep, terima kasih juga sudah berkunjung ke blog kami :)
      Jangan lupa di-life fan page kami juga jika merasa bermanfaat… :D

      Reply
  3. silvi

    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…

    Reply
    • Garry

      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(); ?>

      Reply
  4. had

    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

    Reply
    • Garry

      Halo Had, sejauh yang saya tahu, saat ini belum bisa. Mungkin harus melakukan perubahan pada file core extensionnya.

      Reply
  5. hebby

    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’,

    ),
    )); ?>

    Reply
    • Garry

      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.

      Reply
  6. Septika

    Misi gan,
    Sebelumnya ma kasih buat tutorialnya.
    convert ke Excel nya udah berhasil,
    tapi, saya butuh convert ke excel hasil search attributes.
    caranya gimana yah gan?

    Reply
  7. Arif

    gan punyaku kok kyk gini ya ?
    The column must be specified in the format of “Name:Type:Label”, where “Type” and “Label” are optional.

    C:\xampp\htdocs\yii\framework\zii\widgets\grid\CGridView.php(412)

    controller
    public function actionExportExcel()
    {
    $model = new Transaksi();
    $model->attributes = $_POST['Transaksi'];
    $this->widget(‘ext.excel.EExcelView’, array(
    ‘title’=>’Transaksi’,
    ‘dataProvider’ => $model->search(),
    ‘filter’=>$model,
    ‘grid_mode’=>’export’,
    ‘columns’ => array(
    ‘idtransaksi’, ‘aproyek.idproyek’,’ assetnumber’,’ tgl_transaksi’,'tgl_masuk’, ‘tgl_keluar’, ‘aprove’
    ),
    ));
    }

    cetak.php

    widget(‘bootstrap.widgets.TbGridView’,array(
    ‘id’=>’transaksi-grid’,
    ‘dataProvider’=>$model->search(),
    ‘filter’=>$model,
    ‘columns’=>array(
    ‘idtransaksi’,
    array(‘name’ => ‘idproyek’, ‘type’ => ‘raw’, ‘value’ => ‘$data->aproyek->username’,
    ‘filter’ => Chtml::listData(User::model()->findAll(), ‘id’, ‘username’),),
    //’idproyek’,
    ‘assetnumber’,
    ‘tgl_transaksi’,
    ‘tgl_masuk’,
    ‘tgl_keluar’,
    ‘aprove’,

    )));
    ?>

    Reply
    • ikal

      mau nanya dong om, tanteu, master yii, hehehe, maklum newbi.

      saya pengen record data yang di filter ataupun yang tidak di filter bias di ekspor ke Excel.

      saya menggunakan extension PHPexcel dan EExcelView.
      dengan direktori ../extensions/phpexcel
      ../extensions/phpexcel.php
      ../extensions/EExcelview.php

      Source yg saya gunakan adalah :
      1. GajiController

      public function actionTampil()
      {
      $model=new Gaji(‘search’);
      $model->unsetAttributes();
      if(isset($_GET['Gaji']))
      $model->attributes=$_GET['Gaji'];

      $this->render(‘tampil’,array(
      ‘model’=>$model,
      ));
      }

      public function actionExport(){
      $model = new Gaji();
      $this->widget(‘ext.EExcelView’, array(
      ‘grid_mode’=>’export’,
      ‘title’ => ‘Daftar Gaji’,
      ‘dataProvider’ => $model->search(),
      ‘filter’ => $model,
      ‘columns’ => array(
      ‘NIP’,
      ‘Nama’,
      ‘Gaji_pokok’,
      ‘Tunjangan’,
      ),
      ));
      }

      2. direktori ../protected/views/site/tampil.php

      widget(‘ext.EExcelView’, array(
      ‘dataProvider’=>$model->search(),
      ‘filter’=>$model,
      ‘columns’=>array(
      ‘nip’,
      ‘nama’,
      ‘gaji_pokok’,
      ‘jurusan_id’,
      ‘tunjangan’,
      ),
      ));
      echo CHtml::submitButton(‘Export’);
      echo CHtml::endForm();
      ?>

      seperti itu coding nya tapi error heheh, mohon solusinya.
      errornya seperti ini

      PHP notice

      C:\xampp\htdocs\Gaji\protected\views\site\tampil.php(7)

      Reply
  8. ff

    malem mas, saya nyoba tutorialnya buat tugas saya, saya udah ngikutin grid_view nya jadi export, tapi tetep aja munculnya di browser bukan jadi ekstensi excel. itu gimana ya? yg mananya yg perlu saya ubah?

    Reply
  9. indrasaputrawardhana

    terimakasih artikelnya gan, sedikit koreksi :
    bila menggunakan code diatas saya tidak bisa melakukan search filter pada cgridview, setelah ditelusuri pada step 1 diatas dan baris kesatu , ada pendeklarasi ulang pada view, ini sebetulnya tidak perlu sehingga menyebabkan filter search tidak berfungsi. hemat saya baris satu pada step satu diatas , dihilangkan maka search akan tetap berfungsi.
    ini ilustrasinya http://ctrlv.in/480987
    anyway artikel ini sangat bagus gan, keep the good work :)

    Reply
  10. ueno kazuma

    untuk teman-teman yang masi bingung berikut hal-hal yang perlu diperhatikan.
    1. jika yang tampil page baru dengan pencarian diatas na.
    solusi : cek path pada file EExcelView pastikan sudah terarah ke phpexcel.
    contoh : public $libPath = ‘ext.excel.PHPexcel’;
    itu berarti file phpexcel.php ada di folder ..\extensions\excel\

    file PHPExcel.php dan folder PHPExcel yang memiliki banyak fungsi berada dalam 1 folder.

    2. jika hasil excel tidak terfilter
    solusi : didalam fungsi exportexcel pada bagian pemanggilan model baru masukan fungsi search.
    contoh : $model = new BUKU(‘search’);

    Reply
  11. Mrs Michellen

    BERLAKU UNTUK KREDIT ANDA

    Apakah Anda seorang pengusaha atau wanita? Apakah Anda dalam stres keuangan? Anda perlu Uang untuk memulai bisnis Anda sendiri? Apakah Anda memiliki pendapatan rendah dan merasa sulit untuk mendapatkan pinjaman dari bank lokal dan lembaga keuangan lainnya?
    Jawabannya ada di sini, MichelleN Haward Badan Kredit adalah jawaban untuk menawarkan semua jenis pinjaman kepada masyarakat atau siapa pun yang membutuhkan bantuan keuangan. Kami memberikan pinjaman pada tingkat bunga 2% kepada individu, perusahaan dan perusahaan di bawah kondisi yang jelas dan mudah.
    hubungi kami hari ini via e-mail di michellenhawardloans@gmail.com

    Catatan: Semua pemohon harus di atas 18 tahun

    Reply
  12. Margaret

    bagaimana dengan report ke pdf dengan data sesuai hasil filter?
    Tolong bantuin dong agan-agan semua

    Reply

Leave a Reply