php動態匯出資料成Excel表格
阿新 • • 發佈:2019-01-08
<?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;
}
}
}