Skip navigation

Monthly Archives: Desember 2011


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();

        }
}
Iklan
%d blogger menyukai ini: