Yii framwork : bel@jar ngimpor Excel ke MySQL

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

beginWidget(‘CActiveForm’, array(
‘id’=>’import-form’,
‘enableAjaxValidation’=>false,
‘htmlOptions’=> array(‘enctype’=>’multipart/form-data’),
)); ?>

labelEx($model,’file_excel’); ?>
Filefield($model,’file_excel’); ?>
error($model,’file_excel’); ?>

……

//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 :