Beranda · Contact Us · Downloads

Yii: Import Data from Excel into MySQL Database

Pada artikel sebelumnya saya sudah membahas langkah-langkah mengupload file (klik di sini) dan langkah untuk membaca file excel (klik di sini). Kali ini saya akan mencoba membahas sedikit tentang bagaimana import data dari excel dan memasukkannya ke dalam database.

Berikut sekenario yang akan dijalankan :
  • Upload file excel
  • Membaca data dari file excel dan menginputkannya ke dalam database
  • Unlink file excel
1. Pertama buatlah halaman untuk upload file, definiskan model beserta atributnya :
//models/ImportForm.php
<?php
class ImportForm extends CFormModel{
    public $file_excel;
   
    public function rules(){
        return array(
            array('file_excel','file','types'=>'xls',
            'allowEmpty'=>false),
        );
    }
   
    public function attributeLabels(){
        return array(
        'file_excel'=>'File',
        );
    }
}
?>
 2. Di dalam view, buatlah form upload

//views/mahasiswa/_formimport.php
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'import-form',
    'enableAjaxValidation'=>false,
    'htmlOptions'=> array('enctype'=>'multipart/form-data'),
)); ?>


<div class="row">
        <?php echo $form->labelEx($model,'file_excel'); ?>
        <?php echo $form->Filefield($model,'file_excel'); ?>
        <?php echo $form->error($model,'file_excel'); ?>
    </div>
......
//views/mahasiswa/import.php
<h1>Import Mahasiswa</h1>
<?php $this->renderPartial('_formimport', array('model'=>$model)); ?>
 
3. Langkah terakhir adalah membuat action import, perhatikan kode di bawah ini :
public function actionImport()
{
 $model=new ImportForm;
 require_once Yii::app()->basePath.'/../upload/excel_reader2.php';

       
   if (isset($_POST['ImportForm']))
   {
     $a=$model->validate();
     if ($a) {
       //upload file
       $model->attributes=$_POST['ImportForm'];
       $file=CUploadedFile::getInstance($model,'file_excel');
       $file->saveAs(Yii::app()->basePath.'/../upload/import.xls');
                   
       //Read excel to array
       $path=Yii::app()->basepath.'/../upload/import.xls';
       $data = new Spreadsheet_Excel_Reader($path);
       $nim=array();
       $nama=array();
       $alamat=array();
                       
       $berhasil=0;
       $gagal= 0;
       //insert into database
       for ($j=2; $j <= $data->sheets[0]['numRows']; $j++)
          {
             $nim[$j]=$data->sheets[0]['cells'][$j][1];
             $nama[$j]=$data->sheets[0]['cells'][$j][2];
             $alamat[$j]=$data->sheets[0]['cells'][$j][3];
               
             $model= new Mahasiswa;
             $model->nim=$nim[$j];
             $model->nama=$nama[$j];
             $model->alamat=$alamat[$j];
             $model->create_time=new CDbExpression('now()');
             $model->save();
              
               //hitung record
               if(!$model->save()){
                 $gagal++;
               } else {
                 $berhasil++;
               }  
          }
        Yii::app()->user->setFlash('sukses',$berhasil.' record
        berhasil disimpan dan '.$gagal.' record gagal disimpan..');
        //hapus file excel
        unlink ($path);
        $this->redirect(array('admin'));
       }
    }
    $this->render('import',array('model'=>$model));
}

Hasilnya :





Good Luck!

Artikel keren lainnya:

3 Tanggapan untuk "Yii: Import Data from Excel into MySQL Database"

  1. Saya udah coba ,coding di form nya ga lengkap om . saya error di bagian submitbutton nya . saya pake CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); malah error. method isNewRecord nya ga ada katanya

    BalasHapus
  2. action importnya di bikin di file mana ?

    BalasHapus
  3. jadi kita punya tabel lagi dengan nama import yah mas?

    BalasHapus