1. 程式人生 > >php動態匯出資料成Excel表格

php動態匯出資料成Excel表格

<?php /*** * @Excel 匯入匯出類。 */ class ExecExcel { /*** * @匯出方法 * @$font excel第一行的提示資訊, * 要求:一定要與資料庫中取出的欄位對應 * $data 資料庫取出的資料 * 要求:只能傳遞需要匯出的欄位,否則會資料錯亂。 */ public static function Export($font,$data){ //@獲得物件 $Obj=ExecExcel::getObject(); //@獲得當前活動 sheet 操作物件
$objSheet=$Obj->excel->getActiveSheet(); //@獲得操作的表格字母 $letter=$Obj->getLetter($font); //@設定當前 sheet 名稱 $objSheet->setTitle("dakayungou"); //@Excel寫入頭部提示資訊 foreach ($font as $ak=>$av){ $objSheet->setCellValue($letter[$ak
].'1',$av); } //@Excel寫入資料 foreach ($data as $dk=>$dv){ $num=$dk+2; $dv=array_values($dv); foreach ($dv as $k=>$d){ //@自動設定單元格寬度 $objSheet -> getColumnDimension($letter[$k]) -> setAutoSize(true); //@設定單元格為文字格式
$objSheet->getStyle($letter[$k])->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); $objSheet->setCellValueExplicit($letter[$k].$num,$d,PHPExcel_Cell_DataType::TYPE_STRING); } } //@銷燬變數 unset($data); unset($font); //@header頭宣告為下載 header('Content-Type:application/vnd.ms-excel'); header('Content-Disposition:attachment;filename=demo.xls'); header('Cache-Control:max-age=0'); //@傳入當前例項物件,生成指定格式檔案 $objWrite=PHPExcel_IOFactory::createWriter($Obj->excel,'Excel5'); //@輸出到瀏覽器 $objWrite->save("php://output"); } //@獲取對應字母方法 protected function getLetter($font){ //@生成26個字母 $letter=range('A','Z'); //@計算字母長度 $letter_long=count($letter); //@儲存遍歷好的資料 $array=array(); //@遍歷陣列 foreach ($font as $k=>$f){ $temp=''; //@如果長度大於26 $last=substr($k/$letter_long,0,1); if($last>0){ $temp.=$letter[$last-1]; } $temp.=$letter[$k%$letter_long]; $array[$k]=$temp; } //@銷燬變數 unset($font); //@返回拼接好的陣列 return $array; } //@用來儲存該物件 private static $object; //@用來儲存Excel物件 protected $excel=null; //@ //@ private function __construct(){ Yii::import('application.vendors.*'); require 'PHPExcel.php'; $this->excel= new PHPExcel(); } //@私有克隆 private function __clone(){ } //@獲取物件方法 public static function getObject(){ if(self::$object instanceof self){ return self::$object; }else{ return self::$object=new self; } } }