[Yii Framework] Convert Data To Excel

Data yang sudah kita miliki sering kali harus kita konversi ke dalam bentuk excel untuk suatu kebutuhan. Berikut langkah-langkah mengkonversi data ke dalam excel dengan menggunakan Yii Framework.

Proses ini sendiri saya lakukan dengan menggunakan sebuah extension yang ada pada Yii Framework, yaitu extension phpexcel yang dapat anda download disini. Silahkan anda download file tersebut dan copy ke dalam folder extensions yang sudah ada pada project Yii anda. Berikut kode yang perlu anda masukkan untuk mengkonversi data anda ke dalam excel :

    $hasil=Masukkan nilai array anda disini
    Yii::import('application.extensions.phpexcel.JPhpExcel');
    $xls = new JPhpExcel('UTF-8', false, 'test');
    $xls->addArray($hasil);
    $xls->generateXML('namaFileExcelYangAkanDihasilkan');

Penjelasan : pada variabel $hasil anda harus mendefinisikan dulu array yang anda miliki. Setelah itu array tersebut anda masukkan ke dalam sebuah parameter pada JPhpExcel. Dan secara otomatis file excel akan dihasilkan dan sudah tersedia untuk di download..

Selesai.. Selamat mencoba..

Semoga membantu..😀

40 Responses to [Yii Framework] Convert Data To Excel

  1. fachrizal says:

    misal saya ingin download tabel user misal ada field : nama, alamat, no telpon, dst ,,,
    saya ada link download, ketika di download akan download file excel dengan field sesuai dengan data di database plus datanya pastinya …. gmana caranya ya mas ??? mohon bantuannya … saya udah download phpexcelnya …….

    thx banget , moga comment ini mas balas ..

  2. sebenernya nilai yang di convert ke dalam excel adalah nilai array, jadi kalo mau buat yang ada field nya. Agan cukup masukin aja di arraynya..

  3. fachrizal says:

    belum ngerti kan ,, misal di view ane buat gini :

    array(‘label’=>’Simpan’, ‘url’=>array(‘simpan’,’id’=>$iddocsspkl))

    di controller ane gini :

    public function actionSimpan(){

    $id = $_GET[iddocsspkl];
    $model = new SpklDetail;
    $dataprovider = $model->listDetailSpkl($id);

    Yii::import(‘application.extensions.phpexcel.JPhpExcel’);
    $xls = new JPhpExcel(‘UTF-8’, false, ‘test’);
    $xls->addArray($dataprovider);
    $xls->generateXML(‘DraftSPKL’);
    }

    di model gini gan :

    public function listDetailSpkl($idspkl){
    $criteria = new CDbCriteria;
    $criteria->compare(‘nik’, $this->nik);
    $criteria->compare(‘nama’, $this->nama);
    $criteria->compare(‘bulan’, $this->bulan);
    $criteria->compare(‘tahun’, $this->tahun);
    $criteria->compare(‘iddocsspkl’, $idspkl);

    return new CActiveDataProvider($this, array(
    ‘criteria’ => $criteria,
    ));

    di controller nya kayaknya masih salah gan,,, mohon pencerahan dari agan … thx banget gan ..

  4. fachrizal says:

    udah bisa kok gan ,,,, cuma masih kendala di nama fieldnya, yang muncul list data aja di excel nya, tambahin nama field nya gmana ya gan ???

  5. sory baru bales gan. Coba di post dimari gan coding di controller ny gan..

  6. fachrizal says:

    ni gan :

    public function actionSimpan(){

    $iddocsspkl = $_GET[id];

    $criteria = new CDbCriteria;
    $criteria->condition=’iddocsspkl=:iddocsspkl’;
    $criteria->params=array(‘:iddocsspkl’=>$iddocsspkl);
    $datareader = SpklDetail::model()->findAll($criteria);
    $hasil = array();

    foreach($datareader as $row){
    $hasil[]=array(
    ‘nik’=>$row->nik,
    ‘nama’=>$row->nama,
    ‘tanggal_lembur’=>$row->tanggal_lembur,
    ‘start_time’=>$row->start_time,
    ‘end_time’=>$row->end_time,
    ‘keterangan’=>$row->keterangan,
    );
    }

    Yii::import(‘application.extensions.phpexcel.JPhpExcel’);
    $xls = new JPhpExcel(‘UTF-8’, false, ‘draft’);

    $xls->addArray($hasil);

    $xls->generateXML(‘DraftSPKL’);
    }

  7. buat code ny jadi kek gini gan:

    $hasil[0]=array(‘nik’=>’NIK’,’nama’=>’NAMA’, …..);

    foreach($datareader as $i=>$row){
    $hasil[$i+1]=array(
    ‘nik’=>$row->nik,
    ‘nama’=>$row->nama,
    ‘tanggal_lembur’=>$row->tanggal_lembur,
    ‘start_time’=>$row->start_time,
    ‘end_time’=>$row->end_time,
    ‘keterangan’=>$row->keterangan,
    );
    }

    jdi di tambahin aja di array[0] nama yang mau dimasukkin..

  8. fachrizal says:

    oke gan…, solved proble ane gan … thx banget ya .,,, ane masih newbie di yii,, ntar banyak2 nanyak ya gan …. moga agan juga nambah terus ilmunya dan terus berbagi ,,, thx banget gan ..

  9. afif says:

    kalo manggil relasi buat di export ke exel gimana?

  10. sebenernya mas cukup panggil hasil dari relationnya aja mas, setelah itu hasilnya itu dimasukin ke array utk kemudian di set di excel nya mas..

  11. afif says:

    kalo tampilan kayak

    gimana?

  12. untuk membentuk tampilan di excel itu agan sbenr nya harus cocokin aja dan atur tata letak ny by code. Jadi agan set satu per satu tata letak ny secara langsung gan..

  13. afif says:

    kalo merge cell gimana mas?

  14. saya juga ga tahu sih gan cara merge cell, tapi kalo merge cell yg agan butuh hanya utk memasukkan 2 buah nilai dalam suatu cell, kenapa agan nggak gabungin langsung isi ny by code.
    Jadi misal value1 dan value2 langsung di masukin keduanya ke dalam suatu cell..

    tapi kalo merge cell yg agan butuh adalah utk membuat tampilan merge cell yg udah kompleks hingga garis2nya seperti kalo dibuat di excel, saya juga belum tahu kalo yg sperti itu gan..

  15. dbormamora says:

    Bit, ini juga bisa buat ngekspor dari query ga?

  16. bisa.. masukin aja hasil query ny ke dalam array yang ada di contoh bor..

  17. dbormamora says:

    kalo ada fungsi COUNT pada saat query, penulisan arraynya kek mana ya, Bit? trus kalo ‘id’-nya yg di-COUNT itu gmn jg deklarasiin ke array?

  18. coba pake query biasa dulu bor buatnya..
    nanti kalo udah baru coba jalanin query yang kau mau di SQL.. ntar pola array nya itu bisa di atur kok..

  19. dbormamora says:

    kan udah dibuat pake query biasa Bit, nah tapi cm keluar atributnya aja,, instance2nya kg tampil.. trus tiap kali excelnya mau dibuka,ada warning “is in a different format”.. itu knp ya, Bit?

  20. mksd ny cuma keluar attribute gmana bor?

  21. dbormamora says:

    misal nya atribut : provinsi (sumut, sumbar).. tapi cm provinsi aja yg nampil.. isiannya kagak ada..

  22. itu berrti salah kau ngambil datanya bor..
    coba cari csqldataProvider di blog ini bor.. itu ada cara nangkep nilai dari sql..
    nanti kalo kau udah bisa nampilin nilai dari sql, baru kau conversi nilainya itu ke dalam array.. baru nanti convert ke excel..

  23. dbormamora says:

    oia ya? soalnya ini udah pernah kubuat dalam fungsi nampilin tabel sebelumnya, dan berhasil Bit.. Coba ku telaah lagi..

  24. dbormamora says:

    bit, gw jadi bingung dah.. jadi kan gw punya relasi yang dihasilin dr sql (fs. tertentu).. nah trus gw mau konversi itu ke dalam bentuk excel.. nah, pas gw coding kyk gini..
    public function actionExcel()
    {

    $hasil[0]=array(‘propinsi’=>’propinsi’,count(‘id_dokumen’)=>’Antar’,count(‘tgl_masuk’)=>’Respon’);

    Yii::import(‘application.extensions.phpexcel.JPhpExcel’);
    $xls = new JPhpExcel(‘UTF-8’, false, ‘test’);
    $xls->addArray($hasil);
    $xls->generateXML(‘report’);

    }

    pas diview gw tmbahin :

    pas di-running-in sih donlot, tp yah gtu gabisa keluar isi tabelnya.. ^^’v

  25. ini data nya dari mana bor? $hasil[0]=array(‘propinsi’=>’propinsi’,count(‘id_dokumen’)=>’Antar’,count(‘tgl_masuk’)=>’Respon’);

    coba jangan di convert ke excel dulu bor.. tampilin biasa aja. Kalo emang udah berhasil nampilin, baru nanti coba konvert ke excel..

  26. dbormamora says:

    ini datanya dr sql yang udah gw buat sebelumnya..
    nampilin kyk mana maksudnya Bit..? karena gw ga nangkep maksud lu.. maap ye^^’

  27. kau kan buat query bor, coba hasil query nya itu kau tampilin dulu bor.. di coba2 aja nampilin beberapa field terntentu.. jadi disana kau udah tau nanti gmana cara nampilin dan nangkep nilai suatu field..

    Kalo udah bisa, baru kau lanjtin pelajari cara masukin nilai di field nya ke dalam suatu array.. kalo udah bisa baru di konversi ke excel bor..

  28. reviannizar says:

    Import Excel yang lebih flexibel untuk yii 1.1x, flexibel sebab definisi field cukup diletakkan pada baris pertama file exel. Yang perlu diperhatikan untuk field dengan type autoincrement harus tidak disertakan sebagai data.
    public $errorExcel;

    public function actionExcel(){
    $model=new CobaExcel;
    $this->errorExcel=”;
    if(isset($_POST[‘CobaExcel’])){
    if($_FILES[‘CobaExcel’][‘type’][‘filee’]!=’application/vnd.ms-excel’){
    $this->errorExcel=’File Must be Excel 2003 Format’;
    }else{
    $ipath=$_FILES[‘CobaExcel’][‘tmp_name’][‘filee’];
    $ilib = Yii::getPathOfAlias(‘ext.phpexcelreader.JPhpExcelReader’).’.php’;
    require_once($ilib);
    $data = new Spreadsheet_Excel_Reader($ipath);
    $cols=array();
    $j=1;$k=$data->sheets[0][‘numCols’];
    $l=$data->sheets[0][‘numRows’];
    for($i=1; $isheets[0][‘cells’][$j][$i]))
    $cols[$i]=$data->sheets[0][‘cells’][$j][$i];
    }
    for ($j=2; $j<=$l; $j++){
    $model=new CobaExcel;
    for($i=1; $isheets[0][‘cells’][$j][$i]))
    $idata=$data->sheets[0][‘cells’][$j][$i];
    else $idata=”;
    $model->{$cols[$i]}=$idata;
    }
    $model->save();
    }
    unlink($ipath);
    $this->redirect(array(‘index’));
    }
    }
    $this->render(‘Excel’,array(‘model’=>$model));
    }

    Pengecekan dan pengambilan file langsung dari $_files, bila bukan format excel 2003 didefisikan errorexel. Berbeda dengan artikel, baris pertama sheet exel harus diisi nama field dari tabel yang akan diisi.

  29. ini mksd ny apa ya gan? saya bingung?

  30. vy says:

    bang… cara ngilangin menu barnya di excelnya gimana y? jadi maunya yg tampil cuma hasil array

  31. Jang Wahyu says:

    Mas mau nanya nich kalau cara convert ke PDF langsung dari Gridnya nya gimana ya? minta petunjuk dan tutorialnya Mks…

    pada bagus2 tutornya😀

  32. Jang Wahyu says:

    owh gitu ya mas… oke deh ku cari2 dulu heheh😀 makasi ya mas…

  33. gan ane ngikutin koding diatas,untuk dowload report excel berdasarkan parameter

    1. MODEL
    public $from_date;
    public $to_date;
    public function search2()
    {
    $criteria=new CDbCriteria;
    $criteria->compare(‘user_id’,$this->user_id);
    $criteria->compare(‘lokasi’,$this->lokasi,true);
    //$criteria->compare(‘create_date’,$this->create_date,true);
    $criteria->compare(‘create_date’,$this->create_date,true);
    /* $criteria->mergeWith($this->dateRangeSearchCriteria(‘create_date’,$this->create_date
    )); */
    if(!empty($this->from_date) && empty($this->to_date)){
    $criteria->condition=”create_date >= ‘$this->from_date'”;
    }elseif(!empty($this->to_date) && empty($this->from_date)){
    $criteria->condition=”create_date to_date'”;
    }elseif(!empty($this->to_date) && !empty($this->from_date)){
    $criteria->condition=”create_date >= ‘$this->from_date’ and create_dateto_date'”;
    }
    return new CActiveDataProvider($this, array(
    ‘criteria’=>$criteria,
    ‘sort’=>array(‘defaultOrder’=>’create_date DESC’,),
    ));
    }

    2. CONTROLLER ane
    public function actionExcel()
    {
    $model=new Satisfact(‘search2’);
    /* $model->unsetAttributes(); // clear any default values */
    if(isset($_GET[‘Satisfact’])){
    /* $model->attributes=$_GET[‘Satisfact’]; */
    $model->user_id=$_GET[‘Satisfact’][‘user_id’];
    $model->lokasi=$_GET[‘Satisfact’][‘lokasi’];
    $model->from_date=$_GET[‘Satisfact’][‘from_date’];
    $model->to_date=$_GET[‘Satisfact’][‘to_date’];

    //jphpexcel
    $datareader=Satisfact::model()->findAll();
    $hasil[0]=array (
    ‘id’ => ‘ID’,
    ‘satisfy_val’ => ‘Satisfy Value’,
    ‘message’ => ‘Message’,
    ‘user_id’ => ‘User’,
    ‘user01.username’=>’User Inputers’,
    ‘lokasi’ => ‘Survey Location’,
    ‘user01.lokasi’=>’Office’,
    ‘create_date’ => ‘Create Date’,
    ‘satisfact01.name’ => ‘Nama satisfact’,
    );
    foreach ($datareader as $i=>$row){
    $hasil($i+1)=array(
    ‘id’ => $row->id,
    ‘satisfy_val’ =>$row-> satisfy_val,
    ‘message’ =>$row-> message,
    ‘user_id’ =>$row-> user_id,
    ‘user01.username’=>$row->user01.username,
    ‘lokasi’ =>$row->lokasi,
    ‘user01.lokasi’=>$row->user01.lokasi,
    ‘create_date’ =>$row-> create_date,
    ‘satisfact01.name’ =>$row->satisfact01.name,

    );
    Yii::import(‘application.extensions.phpexcel.JPhpExcel’);
    $xls = new JPhpExcel(‘UTF-8’, false, ‘test’);
    $xls->addArray($hasil);
    $xls->generateXML(‘namaFileExcelYangAkanDihasilkan’);
    }
    }
    $this->render(‘export’,array(
    ‘model’=>$model,
    ));

    }

    3. VIEW

    labelEx($model,’user_id’); ?>
    findAll();
    echo CHtml::activeDropDownList(
    $model,’user_id’,
    CHtml::listData($_u,’id’,’username’),
    array(‘prompt’=>”,) //empty is aliases FOR ALL user
    );
    ?>

    labelEx($model,’lokasi’); ?>
    findAll(‘id’);
    echo CHtml::activeDropDownList(
    $model,’lokasi’,
    CHtml::listData($lo_u,’location’,’location’),
    array(‘prompt’=>”,)//empty is aliases FOR ALL lokasi
    );
    ?>

    label($model,’lokasi’); ?>
    textField($model,’lokasi’,array(‘size’=>25,’maxlength’=>25)); ?>

    label($model,’create_date’); ?>
    textField($model,’create_date’); ?>
    widget(‘zii.widgets.jui.CJuiDatePicker’,
    array(
    ‘name’=>’Satisfact[from_date]’,
    ‘options’=>array(‘dateFormat’=>’yy-mm-dd’,),
    ));
    echo ” To : “;
    $this->widget(‘zii.widgets.jui.CJuiDatePicker’,
    array(
    ‘name’=>’Satisfact[to_date]’,
    ‘options’=>array(‘dateFormat’=>’yy-mm-dd’,),
    ));
    ?>

    endWidget(); ?>

    klo array diisi ngga dari model jalan gan, tp klo dibuat kyk diatas..gada warning apa2 cuma putih doang. mohon bantuannya agan sabit, kira2 salah dimana yak ??

    • maaf gan double posting, yang diatas kurang lengkap

      gan ane ngikutin koding diatas,untuk dowload report excel dengan tambahan parameter user,lokasi dan date range

      1. MODEL
      public $from_date;
      public $to_date;
      public function search2()
      {
      $criteria=new CDbCriteria;
      $criteria->compare(‘user_id’,$this->user_id);
      $criteria->compare(‘lokasi’,$this->lokasi,true);
      //$criteria->compare(‘create_date’,$this->create_date,true);
      $criteria->compare(‘create_date’,$this->create_date,true);
      /* $criteria->mergeWith($this->dateRangeSearchCriteria(‘create_date’,$this->create_date
      )); */
      if(!empty($this->from_date) && empty($this->to_date)){
      $criteria->condition=”create_date >= ‘$this->from_date'”;
      }elseif(!empty($this->to_date) && empty($this->from_date)){
      $criteria->condition=”create_date to_date'”;
      }elseif(!empty($this->to_date) && !empty($this->from_date)){
      $criteria->condition=”create_date >= ‘$this->from_date’ and create_dateto_date'”;
      }
      return new CActiveDataProvider($this, array(
      ‘criteria’=>$criteria,
      ‘sort’=>array(‘defaultOrder’=>’create_date DESC’,),
      ));
      }

      2. CONTROLLER ane
      public function actionExcel()
      {
      $model=new Satisfact(‘search2’);
      /* $model->unsetAttributes(); // clear any default values */
      if(isset($_GET[‘Satisfact’])){
      /* $model->attributes=$_GET[‘Satisfact’]; */
      $model->user_id=$_GET[‘Satisfact’][‘user_id’];
      $model->lokasi=$_GET[‘Satisfact’][‘lokasi’];
      $model->from_date=$_GET[‘Satisfact’][‘from_date’];
      $model->to_date=$_GET[‘Satisfact’][‘to_date’];

      //jphpexcel
      $datareader=Satisfact::model()->findAll();
      $hasil[0]=array (
      ‘id’ => ‘ID’,
      ‘satisfy_val’ => ‘Satisfy Value’,
      ‘message’ => ‘Message’,
      ‘user_id’ => ‘User’,
      ‘user01.username’=>’User Inputers’,
      ‘lokasi’ => ‘Survey Location’,
      ‘user01.lokasi’=>’Office’,
      ‘create_date’ => ‘Create Date’,
      ‘satisfact01.name’ => ‘Nama satisfact’,
      );
      foreach ($datareader as $i=>$row){
      $hasil($i+1)=array(
      ‘id’ => $row->id,
      ‘satisfy_val’ =>$row-> satisfy_val,
      ‘message’ =>$row-> message,
      ‘user_id’ =>$row-> user_id,
      ‘user01.username’=>$row->user01.username,
      ‘lokasi’ =>$row->lokasi,
      ‘user01.lokasi’=>$row->user01.lokasi,
      ‘create_date’ =>$row-> create_date,
      ‘satisfact01.name’ =>$row->satisfact01.name,

      );
      Yii::import(‘application.extensions.phpexcel.JPhpExcel’);
      $xls = new JPhpExcel(‘UTF-8’, false, ‘test’);
      $xls->addArray($hasil);
      $xls->generateXML(‘namaFileExcelYangAkanDihasilkan’);
      }
      }
      $this->render(‘export’,array(
      ‘model’=>$model,
      ));
      }

      3. VIEW

      labelEx($model,’user_id’); ?>
      findAll();
      echo CHtml::activeDropDownList(
      $model,’user_id’,
      CHtml::listData($_u,’id’,’username’),
      array(‘prompt’=>”,) //empty is aliases FOR ALL user
      );
      ?>

      labelEx($model,’lokasi’); ?>
      findAll(‘id’);
      echo CHtml::activeDropDownList(
      $model,’lokasi’,
      CHtml::listData($lo_u,’location’,’location’),
      array(‘prompt’=>”,)//empty is aliases FOR ALL lokasi
      );
      ?>

      label($model,’lokasi’); ?>
      textField($model,’lokasi’,array(‘size’=>25,’maxlength’=>25)); ?>

      label($model,’create_date’); ?>
      textField($model,’create_date’); ?>
      widget(‘zii.widgets.jui.CJuiDatePicker’,
      array(
      ‘name’=>’Satisfact[from_date]’,
      ‘options’=>array(‘dateFormat’=>’yy-mm-dd’,),
      ));
      echo ” To : “;
      $this->widget(‘zii.widgets.jui.CJuiDatePicker’,
      array(
      ‘name’=>’Satisfact[to_date]’,
      ‘options’=>array(‘dateFormat’=>’yy-mm-dd’,),
      ));
      ?>

      endWidget(); ?>

      gan masalah ane klo array diisi ngga dari model, proses jalan gan, tp klo dibuat kyk diatas..gada warning apa2 cuma tampilan putih doang. mohon bantuannya agan sabit, kira2 salah dimana yak ?? ane cuma mau ngambil data dalam excel yang udh disorting berdsarkan user, lokasi dan date range. proses sortingnya jalan jika //jphpmyexcel di ga diaktifin.

    • sori gan, pusing kalo di post coding panjang gini..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: