Tadi ada yang menanyakan di forum Yii tentang bagaimana membuat file excel yang dapat didownload di Yii. Intinya di sini kita tinggal pakai HTTP Header Content-Disposition yang dapat menyatakan sebuah halaman dapat diunduh ke dalam sebuah file. Setelah itu kita tinggal menggunakan library PHPExcel.
Ini contoh kodenya. Belum saya coba, tapi harusnya jalan.
<?php
class DownloadController extends CController {
public function actionIndex(){
//Pertama-tama download phpexcel terus ditaruh di /protected/extension/
//Load data ke dalam array sebelum dimasukkan ke file Excel
//ActiveRecord dan kelas-kelas bawaan Yii kemungkinan tidak akan jalan setelah kita nyalakan PHPExcel
$users = User::model()->findAll();
$arrayUsers = array();
foreach($users as $user){
$arrayUsers[] = array(
'nama' => $user->nama,
'email' => $user->email,
);
}
//Matikan autoloader bawaannya Yii
$phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.Classes');
spl_autoload_unregister(array('YiiBase', 'autoload'));
//Include PHPExcel
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
//Setelah ini kelas-kelas bawaan Yii kemungkinan besar tidak akan jalan
//Buat object PHPExcel Baru
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("Petra Barus");
$objPHPExcel->getProperties()->setLastModifiedBy("Petra Barus");
$objPHPExcel->getProperties()->setTitle("Dokumen Saya");
$objPHPExcel->getProperties()->setSubject("Dokumen Saya");
$objPHPExcel->getProperties()->setDescription("Dokumen Saya");
//Selecting sheets
$objPHPExcel->setActiveSheetIndex(0);
//Mengisi Excel
foreach($arrayUsers as $k => $u){
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $k, $u['nama']);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $k, $u['email']);
}
//HTTP Header untuk download
header('Content-type: application/ms-excel');
header('Content-Disposition: inline; attachment; filename=dokumen.xls');
flush();
//Dumping data to HTTP
$writer = new PHPExcel_Writer($objPHPExcel);
$writer->save('php://output');
exit();
}
}


