zoukankan      html  css  js  c++  java
  • 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之生成表格汇总列(二)

    PHP中常见的问题点,知识点,及盲点。
  • 相关阅读:
    【Lintcode】112.Remove Duplicates from Sorted List
    【Lintcode】087.Remove Node in Binary Search Tree
    【Lintcode】011.Search Range in Binary Search Tree
    【Lintcode】095.Validate Binary Search Tree
    【Lintcode】069.Binary Tree Level Order Traversal
    【Lintcode】088.Lowest Common Ancestor
    【Lintcode】094.Binary Tree Maximum Path Sum
    【算法总结】二叉树
    库(静态库和动态库)
    从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/sblack/p/12851314.html
Copyright © 2011-2022 走看看