PHPExcel之生成xlsx並下載(一)


PHPExcel提供了一個強大的操作表格的php類庫,之前都是copy使用,簡單的使用,對於復雜的表格的處理還是難以上手。

一,針對PHPExcel是封閉好的類開,一般有一個基本的類需要包含或者導入到當前的業務代碼中,這個類就是PHPExcel.php,針對這個類,大家只需要關注構造函數那堆初始化各種操作對象。

public function __construct()
    {
        $this->uniqueID = uniqid();
        $this->calculationEngine = new PHPExcel_Calculation($this);

        //sheet操作類
        $this->workSheetCollection = array();
        $this->workSheetCollection[] = new PHPExcel_Worksheet($this);
        $this->activeSheetIndex = 0;

        //表格屬性操作類
        $this->properties = new PHPExcel_DocumentProperties();

        // Create document security
        $this->security = new PHPExcel_DocumentSecurity();

        // Set named ranges
        $this->namedRanges = array();

        // Create the cellXf supervisor
        $this->cellXfSupervisor = new PHPExcel_Style(true);
        $this->cellXfSupervisor->bindParent($this);

        // Create the default style
        $this->addCellXf(new PHPExcel_Style);
        $this->addCellStyleXf(new PHPExcel_Style);
    }

   常用的的基本就是上面2個,一個屬性設置類,一堆的set,相對應的一堆的get方法。一個是sheet操作類,這個是主要的內容操作處理類。

 

二,下面一個簡單的例子

  

<?php
/**
 * PHPExcel應用之一 寫xlxs文件 並提供下載
**/
require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel.php';
$objExcel = new PHPExcel();

//xlsx相關屬性操作方法  關聯類 PHPExcel/Classes/PHPExcel/DocumnentProperties.php
$objExcel->getProperties()->setCreator("author")					//設置作者
							->setLastModifiedBy("last save author")	//最后一次保存者
							->setTitle("title")						//標題
							->setSubject("subject")					//主題
							->setDescription("remark")				//備注
							->setKeywords("mark")					//標記
							->setCategory("category");				//類別
							
							
//對sheet cell進行操作
$objExcel->setActiveSheetIndex(0)				//會返回worksheet對象 關聯類 PHPExcel/Classes/PHPExcel/Worksheet.php
            ->setCellValue('A1', 'A1')
            ->setCellValue('B1', 'B1')
            ->setCellValue('C1', 'C1')
            ->setCellValue('D1', 'D1');
			
$objExcel->setActiveSheetIndex(0)				//會返回worksheet對象 關聯類 PHPExcel/Classes/PHPExcel/Worksheet.php
            ->setCellValue('A2', 'A2')
            ->setCellValue('B2', 'B2')
            ->setCellValue('C2', 'C2')
            ->setCellValue('D2', 'D2');
			
			
//設置sheet標題
$objExcel->getActiveSheet()->setTitle('the first sheet');

//設置為第一個sheet為活動狀態
$objExcel->setActiveSheetIndex(0);

//保存
$filename = "test.xlsx";
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
$objWriter->save($filename);

//如果生成並提供下載
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename);
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
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: cache, must-revalidate');
header('Pragma: public');
	
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
$objWriter->save('php://output');

 針對表格的各種屬性,大家可以在生成的xlsx上右鍵屬性,詳情里看到

 

三,業務中一般是從DB或者其它為數據類源,例子如下 只用數據那一塊即可

 1 //數據類源為業務DB select id,name,age,address from info
 2 //模擬數據
 3 $data = array(
 4     array("id"=>1,"name"=>"張一","age"=>1,"address"=>"廣東1"),
 5     array("id"=>2,"name"=>"張二","age"=>2,"address"=>"廣東2"),
 6     array("id"=>3,"name"=>"張三","age"=>3,"address"=>"廣東3"),
 7     array("id"=>4,"name"=>"張四","age"=>4,"address"=>"廣東4"),
 8     array("id"=>5,"name"=>"張五","age"=>5,"address"=>"廣東5"),
 9 );
10 
11 //設置標題行
12 $objExcel->setActiveSheetIndex(0)
13             ->setCellValue('A1','ID')
14             ->setCellValue('B1','姓名')
15             ->setCellValue('C1','年齡')
16             ->setCellValue('D1','住址');
17 
18 //內容循環操作即可 從第二行開始
19 $j = 2;
20 foreach($data as $key=>$value){
21     $objExcel->setActiveSheetIndex(0)                
22             ->setCellValue('A'.$j, $value['id'])
23             ->setCellValue('B'.$j, $value['name'])
24             ->setCellValue('C'.$j, $value['age'])
25             ->setCellValue('D'.$j, $value['address']);
26             
27     $j++;
28 }

生生成的效果圖如下:

 

四,假設要對寫入的某一列加一些效果,可以用PHPExcel的富文本類PHPExcel_RichText.php 可以對cell時行加粗,傾斜,顏色的處理

 1 foreach($data as $key=>$value){
 2     //設置某列為富文本 加粗 傾斜 顏色
 3     $objRichText = new PHPExcel_RichText();
 4     $objPayable = $objRichText->createTextRun($value['address']);
 5     $objPayable->getFont()->setBold(true);
 6     $objPayable->getFont()->setItalic(true);
 7     $objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
 8     
 9     $objExcel->setActiveSheetIndex(0)                
10             ->setCellValue('A'.$j, $value['id'])
11             ->setCellValue('B'.$j, $value['name'])
12             ->setCellValue('C'.$j, $value['age'])
13             ->setCellValue('D'.$j, $objRichText);
14             
15     $j++;
16 }

效果如下:

 

                                                                                      PHPExcel之生成表格匯總列(二)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM