PHPexcel的使用

多工作空間,瀏覽器直接下載樣例:

include_once API_SOURCE_ROOT.'lib/PHPExcel.php';
$obpe = new PHPExcel();
$name = "抓拍信息.xls";
$time = date('Y/m/d h:m:sa',time());
$obpe->getProperties()->setCreator("admin")
    ->setLastModifiedBy($time)
    ->setTitle("Office 2007 XLSX Document")
    ->setSubject("EVENT LIST")
    ->setDescription("EVENT LIST")
    ->setKeywords("EVENT LIST")
    ->setCategory("catagory");

$data = array(...);
//設置SHEET
$obpe->setactivesheetindex(0);
//標題
$letter = array('A','B','C','D');
$title = array('設備號','設備名稱','Face ID','抓拍時間');
foreach ($title as $tk => $tv) {
    $obpe->getactivesheet()->setCellValue("$letter[$tk]1",$title[$tk]);
    //加粗
    $obpe->getactivesheet()->getStyle("$letter[$tk]1")->getFont()->setBold(true);
    # code...
}
//寫入多行數據
foreach($data as $k=>$v){
    $i = $k+2;
    /* @func 設置列 */
    $obpe->getactivesheet()->setcellvalue('A'.$i, $v['deviceid']);
    $obpe->getactivesheet()->setcellvalue('B'.$i, $v['desc']);
    $obpe->getactivesheet()->setcellvalue('C'.$i, $v['face']['face_id']);
    $obpe->getactivesheet()->setcellvalue('D'.$i, $v['time']);
}
$obpe->getActiveSheet()->setTitle('具體抓拍信息');

//創建一個新的工作空間(sheet)
$obpe->createSheet();
$obpe->setactivesheetindex(1);
$result = array(...);
$c=1;
foreach($result as $ck=>$cv){
    /* @func 設置列 */
    $obpe->getactivesheet()->setcellvalue('A'.$c, "設備號:".$ck);
    //合併單元格
    $obpe->getActiveSheet()->mergeCells( 'A'. $c .':' .'C'.$c);
    $c++;
    $obpe->getactivesheet()->setcellvalue('A'.$c, "今日到店人次");
    $obpe->getactivesheet()->setcellvalue('B'.$c, "今日到店人數");
    $obpe->getactivesheet()->setcellvalue('C'.$c, "今日新增人數");
    $c++;
    $obpe->getactivesheet()->setcellvalue('A'.$c, $count_result['renci']["$ck"]);
    $obpe->getactivesheet()->setcellvalue('B'.$c, $count_result['renshu_count']["$ck"]);
    $obpe->getactivesheet()->setcellvalue('C'.$c, $count_result['xinzeng']["$ck"]);
    $c++;
}
$obpe->getActiveSheet()->setTitle('總數據統計');

//居中展示
$obpe->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$obpe->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
//直接在瀏覽器輸出
$obwrite = PHPExcel_IOFactory::createWriter($obpe, 'Excel5');
header('Pragma: public');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Content-Type:application/force-download');
header('Content-Type:application/vnd.ms-execl');
header('Content-Type:application/octet-stream');
header('Content-Type:application/download');
header('Content-Disposition: attachment;filename="'.$name.'"');
header('Content-Transfer-Encoding:binary');
$obwrite->save('php://output');
exit;

插入圖片:(單元格其實不支持插入圖片,圖片只是懸浮於設置的單元格位置)

$img_path = '/data/phpexcel/1.jpg';
if (!file_exists($img_path))
    return false;
// 圖片生成
$objDrawing[$i] = new \PHPExcel_Worksheet_Drawing();
$objDrawing[$i]->setPath($img_path);
// 設置寬度高度
$objDrawing[$i]->setHeight(80);//照片高度
$objDrawing[$i]->setWidth(80); //照片寬度
/*設置圖片要插入的單元格*/
$objDrawing[$i]->setCoordinates('A'.$i);
// 圖片偏移距離
$objDrawing[$i]->setOffsetX(12);
$objDrawing[$i]->setOffsetY(12);
$objDrawing[$i]->setWorksheet($obpe->getActiveSheet());

常用用法:

(1)PHPExcel:工作簿對象

    getProperties():獲得當前活動狀態工作表的屬性對象,返回屬性對象
    getActiveSheet():獲得當前活動狀態的工作表,返回工作表對象
    getActiveSheetIndex():獲得當前活動狀態工作表的索引值,返回int
    setActiveSheetIndex():設置當前活動狀態工作表的索引,返回工作表對象
    getSheetByName():通過工作表名稱得到當前工作表對象,返回工作表對象
    getDefaultStyle():獲得excel文檔默認的樣式(所有工作表的樣式),返回樣式對象
    createSheet():在當前活動工作表後創建一個新的工作表
    getSheetCount():獲得excel文檔中工作表的數量,返回int
    getSheetNames():獲得excel文檔中所有工作表名稱組成的數組

2)PHPExcel_Worksheet:工作表對象
    toArray():把工作表中的數據轉換成數組
    fromArray():從數組中獲取數據填充到工作表,返回工作表對象
    getCell():獲得單元格對象
    getCellByColumnAndRow():通過列索引和行索引獲得指定單元格,返回單元格對象
    getDefaultStyle():獲得工作表默認的樣式,返回樣式對象
    getHighestColumn():獲得工作表的最大列,返回列的名稱
    getColumnDimension():獲得當前列
    getStyle():獲得指定單元格的樣式,返回樣式對象
    getParent():獲得父類對象,返回excel文檔對象
    getTitle():獲得工作表的標題或名稱,返回字符串類型
    setCellValue():設置單元格的值,返回工作表對象或單元格對象,完全取決於參數的值
    setCellValueByColumnAndRow():通過列索引和行索引設置單元格的值,返回類型同上
    setCellValueExplicit():設置單元格的值,並顯示指定數據類型,返回工作表對象
    setCellValueExplicitByColumnAndRow():通過列和行索引設置單元格值
    setTitle():設置工作表標題

(3)PHPExcel_Cell:單元格對象
  a. PHPExcel_Style:樣式對象
    getActiveCell():獲得當前活動的單元格的名稱,返回string;如,A1
    getActiveSheet():獲得當前活動的工作表,返回工作表對象
    getAlignment():獲得對齊方式對象,返回對齊方式對象
    getBorders():獲得邊框對象,返回邊框對象
    getFill():獲得填充對象
    getFont():獲得字體對象
    setFont():設置字體,返回樣式對象
b. PHPExcel_Style_Alignment:對齊方式對象
    getHorizontal():獲得水平居中方式
    getVertical():獲得垂直居中方式
    setHorizontal():設置水平居中方式,返回對齊方式對象
    setVertical():設置垂直居中方式,返回對齊方式對象
    居中方式:
        HORIZONTAL_CENTER 
        HORIZONTAL_CENTER_CONTINUOUS
        HORIZONTAL_GENERAL 
        HORIZONTAL_JUSTIFY 
        HORIZONTAL_LEFT 
        HORIZONTAL_RIGHT 
        VERTICAL_BOTTOM 
        VERTICAL_CENTER 
        VERTICAL_JUSTIFY 
        VERTICAL_TOP 
c. PHPExcel_Style_Font:字體對象
    setBold():設置字體加粗
    setColor():設置字體顏色
    setItalic():設置字體傾斜
    setName():設置字體名
    setSize():設置字體大小
    setUnderline():設置字體下劃線

//設置文檔基本屬性  
$objProps = $objExcel->getProperties();  //得到PHPExcel_document文檔對象
$objProps->setCreator("Swain");       //設置作者
$objProps->setLastModifiedBy("Swain"); //設置最後修改時間
$objProps->setTitle("Office XLS Test Document"); //設置標題
$objProps->setSubject("Office XLS Test Document, Demo");//設置主題
$objProps->setDescription("Test document, generated by PHPExcel.");//描 
$objProps->setKeywords("office excel PHPExcel"); //關鍵字
$objProps->setCategory("Test"); //分類

//合併單元格  
$objActSheet->mergeCells('B1:C22'); 

//設置列的寬度  
$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A')->setWidth(30);

/設置行的高度
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(11.5);

//設置單元格的字體
$objFontA5 = $objStyleA5->getFont(); //獲得字體
$objFontA5->setName('宋體');//設置字體名稱 
$objFontA5->setSize(10);  //設置字體大小
$objFontA5->setBold(true);//設置字體加粗
$objFontA5->getColor()->setARGB('FF999999');//設置字體顏色

//設置單元格的對齊方式  
$objAlignA5 = $objStyleA5->getAlignment();//獲得對齊方式
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//水平居右 
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中

//設置單元格的邊框  
$objBorderA5 = $objStyleA5->getBorders();//獲取邊框 
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//邊框樣式
$objBorderA5->getTop()->getColor()->setARGB('FFFF0000');//頂部邊框的顏色 
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//左樣式
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//右樣式

//設置單元格的填充色
$objFillA5 = $objStyleA5->getFill();//填充 
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//填充類型 
$objFillA5->getStartColor()->setARGB('FFEEEEEE');

//計算單元格的值
$objPHPExcel->getActiveSheet()->setCellValue('B7', '=SUM(B5:C5)');
$objPHPExcel->getActiveSheet()->getCell('B7')->getCalculatedValue();
//如果要獲取單元格的一個值,首先需要通過工作表的getCell方法獲取到一個單元格對象,然後再通過單元格對象的getValue方法得到單元格的值,如果單元格的值是通過計算得到的,則需要使用getCalculatedValue方法獲取單元格的值,設置單元格的值,我們只需要通過工作表的setCellValue方法來設置即可

//$dateTimeNow=time();
$objPHPExcel->getActiveSheet()->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));//41105.75

$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);//18:00:54,只是換了一種顯示方式,並不會改變原來值的類型

//添加一個新的worksheet  
$objExcel->createSheet();//創建一個新的工作表
$objExcel->getSheet(1)->setTitle('測試2');//設置當前工作表的標題

//保護單元格  
$objExcel->getSheet(1)->getProtection()->setSheet(true); 
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');  

//輸出內容到excel文件,並將文件保存在服務器上
$objWriter->save("test.xls");

//強制輸出內容到瀏覽器下載  
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
header('Content-Disposition:inline;filename="'.$outputFileName.'"'); 
header("Content-Transfer-Encoding: binary"); 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Pragma: no-cache");  
$objWriter->save('php://output');//參數-表示直接輸出到瀏覽器,供客戶端下載

//合併單元格
$objPHPExcel->getActiveSheet()->mergeCells('A1:C3');

//excel讀取對象
$PHPReader = new PHPExcel_Reader_Excel5();//創建一個excel文件的讀取對象
$PHPExcel = $PHPReader->load($filePath);//讀取一張excel表,返回excel文件對象
$currentSheet = $PHPExcel->getSheet(0);//讀取excel文件中的第一張工作表
$allColumn = $currentSheet->getHighestColumn();//取得當前工作表最大的列號,如,E
$allRow = $currentSheet->getHighestRow();//取得當前工作表一共有多少行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章