Yii Tutorial: Mengekspor CGridView ke Excel
June 13th, 2012, Written by: | Categories: Programming, Tutorial, Yii Framework

Salah satu jenis format file yang paling sering diekspor di dunia Web, menurut penulis, adalah Excel. Jika Anda seorang programmer  PHP, sudah pasti tidak asing lagi dengan pustaka yang bernama PHPExcel. Tahukah kalian, Yii memiliki extension yang membungkus PHPExcel sehingga menjadi sangat gampang digunakan?

Sebenarnya Anda bisa saja menggunakan PHPExcel langsung di Yii karena sifat Yii yang gampang mengimplementasi pustaka pihak ketiga (extensible). Tetapi jika Anda malas menggunakan sintaks PHPExcel, dan ingin hasil yang instan, maka EExcelView akan menjadi jawaban tepat.

EExcelView menghasilkan Excel segampang membuat CGridView. Semuanya pasti setuju, untuk menampilkan informasi tabel di CGridView sangat sederhana sekali. Lihat saja sintaks yang perlu ditulis untuk menampilkan daftar buku di CGridView:

$model = new Buku();
$this->widget('zii.widgets.grid.CGridView', array(
			'dataProvider' => $model->search(),
			'columns' => array(
				'id',
				'judul',
				'tahun',
				'pengarang.nama',
			),
		));

Nah, sekarang misalnya kita ingin daftar buku ini tidak ditampilkan di CGridView, melainkan diekspor ke file Excel. Bagaimana caranya mengekspor daftar-daftar buku tersebut ke Excel? Berikut merupakan tiga langkah sederhananya:

1. Pasang PHPExcel

Untuk dapat menggunakan EExcelView, kita memerlukan PHPExcel. Sayangnya EExcelView tidak menyertakan PHPExcel. Jadi kita harus men-download secara terpisah. Anda bisa men-download PHPExcel dan ambil folder phpexcel untuk taruh di dalam folder webroot/protected/extensions.

2. Pasang EExcelView

Download file EExcelView terbaru. Kemudian masukkan file EExcelView.php ke dalam folder webroot/protected/extensions.

3. Contoh Penggunaan

Sekarang saatnya kita menulis koding untuk ekspor file tersebut. Supaya bisa menghasilkan file Excel, maka sintaks tersebut harus diletakkan di dalam controller. Di contoh berikut penulis meletakkannya di dalam actionExport():

public function actionExport(){
    $model = new Buku();
    $this->widget('ext.EExcelView', array(
        'grid_mode'=>'export',
        'title' => 'Daftar Buku',
	'dataProvider' => $model->search(),
	'filter' => $model,
	'columns' => array(
		'id',
		'judul',
		'tahun',
		'pengarang.nama',
	),
));

Untuk mengetesnya silahkan langsung mengakses URL tersebut. Maka browser akan langsung bertanya ingin men-donwload file Excel atau tidak. Jika Anda download dan buka, voila! Isinya sama seperti konten buku.

Jika ternyata yang muncul bukan file Excel malah tampilan grid(tabel), maka ini disebabkan Anda belum mengatur grid_mode. Pada default, grid_mode akan bernilai “grid” yang artinya akan menghasilkan tampilan tabel. Kita harus ganti menjadi “export” baru EExcelView akan menghasilkan file Excel.

More about: , , ,

42 Responses to “Yii Tutorial: Mengekspor CGridView ke Excel”

  1. Joshua

    Gan, saya uda coba, tapi kenapa ga terexport ke excel yah ? malah tampil di screen web nya ? Apa ada yg kurang ?

    Reply
  2. Garry

    Wah. susah tebaknya… coba saja paste koding Controller agan ke pastebin. Mungkin dari situ saya bisa tahu penyebabnya apa..

    Reply
  3. Joshua

    Hi gan, sudah bisa gan.. pada grid_mode nya itu default nya bernilai ‘grid’, tinggal diganti nilainya menjadi ‘export’.

    Reply
    • Garry

      Ow gitu gan.. saya akan tambahkan pada poin di atas biar orang lain juga tahu. Terima kasih yah.

      Reply
  4. Naisa

    Setelah baca tutorial ini, akhirnya saya bisa mengimport data CGridView ke Excel.

    Tetapi, data yang terimport adalah semua data yang ada. Bagaimana caranya kalau saya hanya ingin mengimport data bardasarkan pencarian yang dilakukan di Cgridview?

    Mohon bantuannya mas… :)

    Terima Kasih Banyak

    Reply
  5. ryu

    gan, saya belum bisa aja nih, selalu yang keluar masih tampilan table :(

    Reply
  6. AGG

    gan ane udah nyobain tutorial diatas kok ngga bisa ya..jadi halaman yang muncul cuma halaman kosong aja.
    Padahal grid_mode sudah ane ikutin
    ‘grid_mode’=>’export’,
    kalo ane rubah modenya jadi ‘grid’ datanya muncul.
    itu kenapa ya???

    Reply
  7. yolanda

    gan mau tanya nih, saya mau download file excel yang udah ada tanpa ambil data dari database, gimana ya gan caranya?

    Reply
  8. arifah

    saya udah ngikitin tutorial diatas, tapi kok masih belum bisa ya? padahal grid_mode udah export gitu?

    Reply
    • Garry

      Harus diperhatikan juga di action yang buat export excel ini. Kalau contoh di atas saya pakai public function actionExport().

      Coba cek apakah action ini ada dikasih echo sesuatu? Kalau ada echo sesuatu maka dia tidak akan bisa export file…

      Reply
  9. arifah

    sudah bisa kok master, ternyata extensi yang saya gunakan salah :)

    Reply
  10. Rahma

    gan ini ane udah nyoba sesuai codingan diatas, controller g dikasih echo juga, knpa tetep munculnya tabelnya aja ya g kedownload?

    Reply
  11. cleo62

    gan punya ane yang keluar cuma tampilan tabel bukan file excel.grid_mode udah export trus tanpa sintax echo juga.gimana nih gan?mohon bantuannya..

    Reply
  12. rifkihanny

    Misi gan, udah nyoba kalau udah di hosting belum ?
    kok ane coba kalau udah online, dia ga ke download yak ?
    terima kasih

    Reply
    • Garry

      Seharusnya tidak berkaitan di online ataupun di localhost.

      Maksud agan, tidak ke-download dalam artian dia muncul dalam bentuk CGridView, padahal coding yang sama persis di localhost bisa download?

      Reply
      • rifkihanny

        Iya gan, kalo yang di localhost kan otomatis dia download ketika buka controllernya.
        Nah pas gw coba di taro hosting, malah jadi “This webpage is not found” tanpa muncul apa2.
        Set path udah sesuai sama di localhost. Kenapa yak kira2 gan ?

        Reply
  13. wend

    gan gw udah ikut petunjuknya tapi ga muncul juga nich file to save nya. datanya doank yg nongol di browser. grid__mode udah pake export juga. dan ga ada echo pula napa ya? nich code gw

    public function actionExport()
    {
    $model = new Detilpangkat();
    $this->widget(‘ext.EExcelView’,array(
    ‘grid_mode’=>’export’,
    ‘title’=>’Daftar Pangkat Pegawai’,
    ‘dataProvider’=>$model->search(),
    ‘filter’=>$model,
    ‘columns’=>array(
    array(‘header’=>’No’,
    ‘value’=>’$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1′),
    ‘nip’,
    ‘nip0.nama’,
    ‘idpangkat0.pangkat’,
    ‘tmtpangkat’,)));
    }

    Reply
    • Garry

      Gan ada kemungkinan bagian:

      array(‘header’=>’No’,‘value’=>’$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1′),

      Coba dihilangkan dan ditest lagi.Kalau tidak ada masalah berarti EExcelView tidak mendukung. soalnya berdasarkan catatan $row sepertinya agak tidak berfungsi..

      Reply
  14. wend

    Belum bisa gan udah coba ane hapus untuk numbering nya jadi kek gini

    public function actionExport()
    {
    $model = new Detilpangkat();
    $this->widget(‘ext.EExcelView’,array(
    ‘grid_mode’=>’export’,
    ‘exportType’=>’Excel5′,
    ‘title’=>’Daftar Pangkat Pegawai’,
    ‘dataProvider’=>$model->search(),
    ‘filter’=>$model,
    ‘columns’=>array(
    // array(‘header’=>’No’,
    // ‘value’=>’$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1′),
    ‘nip’,
    ‘nip0.nama’,
    ‘idpangkat0.pangkat’,
    ‘tmtpangkat’,)));

    tetap tidak mau save to file dia, muncul di halaman browser masih gan.

    Reply
    • Garry

      Hm, cukup aneh. Biasanya kalau tetap muncul teks, kemungkinan bisa banyak.

      Saran saya, coba hilangkan satu per satu kolom (‘nip’, ‘nip0.nama’, dst) tapi terakhir-tearkhir harus sisa satu kolom.

      Lalu kalo dihilangkan masih tetap muncul tampilan, coba hilangkan satu per satu setting atribut (tapi pastikan ‘grid_mode’ dan ‘dataProvider’ tetap ada….

      Jika masih tetap muncul table, maka berikutnya saya akan sarankan mungkin coba cek kelas Detilpangkat fungsi search(), apakah ada coding tidak biasa…

      Reply
  15. wend

    iya gan nanti malam ane coba lagi, kalo belom bisa nampaknya ane harus beralih ke extension lain :(

    Reply
  16. wend

    oke cukup gan ane ga tahan lagi 3 hari berkutat dengan eexcelview malam ini nyerah ane.

    ini di model search gw
    public function search()
    {
    // @todo Please modify the following code to remove attributes that should not be searched.

    $criteria=new CDbCriteria;

    //$criteria->with=array(‘nip0′);
    //$criteria->compare(‘nip0.nama’,$this->cari_nama,true);
    $criteria->compare(‘nip’,$this->nip,true);

    return new CActiveDataProvider($this, array(
    ‘criteria’=>$criteria,
    //’pagination’=>array(
    //’pageSize’=>20),
    ));
    }

    ni di controller gw

    public function actionExport()
    {
    $model = new Detilpangkat();
    $this->widget(‘ext.EExcelView’,array(
    // ‘grid_mode’=>’export’,
    // ‘exportType’=>’Excel5′,
    // ‘title’=>’Daftar Pangkat Pegawai’,
    ‘dataProvider’=>$model->search(),
    // ‘filter’=>$model,
    ‘columns’=>array(
    // array(‘header’=>’No’,
    // ‘value’=>’$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1′),
    ‘nip’,
    // ‘nip0.nama’,
    // ‘idpangkat0.pangkat’,
    ‘tmtpangkat’,)));
    }

    tetap ndak mau export tu excel nyerah dah gan

    Reply
  17. Septika

    Trima kasih gan buat tutorialnya,
    convert ke Excel nya berhasil
    Cuman saya butuh convert ke Excel hasil Search nya aja.
    Gimana yah gan caranya?

    Reply
  18. sugik

    sama, punya saya juga tidak berfungsi ketika dihosting, padahal di localhost lancar-lancar saja

    Reply
    • indrasaputrawardhana

      hoho maaf gan ane ikutin cara diatas, bener bener manjur
      astaga ngikutin forum resminya Yii framework punya bule ga ada yang cocok XD

      makasih artikelnya yang berguna ini, keep the good work :)

      Reply
  19. wais

    diletakin script ini dimana ya?

    public function actionExport(){
    $model = new Buku();
    $this->widget(‘ext.EExcelView’, array(
    ‘grid_mode’=>’export’,
    ‘title’ => ‘Daftar Buku’,
    ‘dataProvider’ => $model->search(),
    ‘filter’ => $model,
    ‘columns’ => array(
    ‘id’,
    ‘judul’,
    ‘tahun’,
    ‘pengarang.nama’,
    ),
    ));

    terus akses url nya seperti apa ya.. mohon diberikan contoh url nya. terima kasih

    Reply
  20. riky

    gan mau nanya nh kalo tampilannya pas mau export tapi malah nampilin tablenya tanpa style tuh knp ya mhoon responnya terimakasih

    Reply
  21. Nanda

    Gan, setelah ane coba, kok malah muncul pesan gini ya :

    Calling unknown method: app\modules\BelajarModul\controllers\PekerjaController::widget()

    padahal ane udh tambahin : use yii\widgets\ActiveForm; di atas sendiri

    tolong bantuanya gan, maaf masih belajar

    Reply

Leave a Reply