線上書籍

Home

[982]PHP網站開發 進階應用技巧

一、PHPExcel(http://phpexcel.codeplex.com)

1.可讀取、產生Excel 97~2007的檔案,甚至可輸出PDF、CSV、HTML檔。
2.安裝需求:PHP 5.2.0 以上、需開啟php_zip、php_xml函式庫。

二、基本架構

<?php
error_reporting(E_ALL);   //關閉PHP錯誤報告
require_once 'excel/PHPExcel.php';    //引入 PHPExcel 物件庫
require_once 'excel/PHPExcel/IOFactory.php';    //引入 PHPExcel_IOFactory 物件庫
$objPHPExcel = new PHPExcel();  //實體化Excel
//----------內容-----------//
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename=檔名');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
?>

三、建立工作表並指定名稱

$objPHPExcel->setActiveSheetIndex(0);  //設定預設顯示的工作表
$objActSheet = $objPHPExcel->getActiveSheet(); //指定預設工作表為 $objActSheet
$objActSheet->setTitle("個人通訊錄");  //設定標題
$objPHPExcel->createSheet(); //建立新的工作表,上面那三行再來一次,編號要改

四、指定儲存格內容

1.有以下類型可設定:TYPE_BOOL、TYPE_ERROR、TYPE_FORMULA、TYPE_INLINE、TYPE_NULL、TYPE_NUMERIC、TYPE_STRING
$objActSheet->setCellValue('A1', '姓名');
$objActSheet->setCellValueExplicit('C2', '0987654321',PHPExcel_Cell_DataType:: TYPE_STRING);

五、調整儲存格欄寬

$objActSheet->getColumnDimension('A')->setWidth(8);  //固定寬度8
$objActSheet->getColumnDimension('B')->setAutoSize(true);  //自動寬度

六、設定文字、儲存格樣式及對齊方向

$objPHPExcel->getDefaultStyle()->getFont()->setSize(9);
$objActSheet->getStyle('A1:D1')->getFill()->setFillType(PHPExcel_Style_Fill:: FILL_SOLID)->getStartColor()->setARGB('FFFFCC99');

七、合併儲存格

$objActSheet1->mergeCells('A1:D1')->setCellValue('A1', '我的收支簿');

八、隨機產生收支內容(這個並不重要)

for($i=3;$i<=15;$i++){
    if($i%2){
        $income=rand(5000,20000); //隨機產生收入
        $pay=0;
    }else{
        $income=0;
        $pay=rand(10,10000); //隨機產生支出
    }
    $objActSheet1->setCellValue('A'.$i, '2010-01-'.$i)->setCellValue('B'.$i, $income)->setCellValue('C'.$i, $pay)->setCellValue('D'.$i, '事由'.$i);
}

九、插入公式

$n=$i-1;
$objActSheet1->setCellValue("A{$i}", '合計')->setCellValue("B{$i}", "=SUM(B3:B{$n})")->setCellValue("C{$i}", "=SUM(C3:C{$n})")->setCellValue("D{$i}", "=B{$i}-C{$i}");

十、設定並複製樣式

//設定預設工作表中一個儲存格的外觀
$objStyleA1 = $objActSheet->getStyle('A1');

//設定字型
$objFontA1 = $objStyleA1->getFont();
$objFontA1->setSize(11);
$objFontA1->setBold(true);
$objFontA1->getColor()->setRGB('FFFFFF');

//設定對齊
$objAlignA1 = $objStyleA1->getAlignment();
$objAlignA1->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objAlignA1->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objAlignA1->setWrapText(true);

//設定邊框
$objBorderA1 = $objStyleA1->getBorders();
$objBorderA1->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA1->getTop()->getColor()->setRGB('FF0000');
$objBorderA1->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA1->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA1->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//設定儲存格顏色
$objFillA1 = $objStyleA1->getFill();
$objFillA1->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objFillA1->getStartColor()->setRGB('99CC00');

//複製格式到其他欄位
$objActSheet->duplicateStyle($objStyleA1, 'A1:D1');