Hex 发表于 2017-4-17 10:30:37

扛着大炮的佬宝 发表于 2017-4-16 19:04
我也有个这个问题。楼主怎么解决呀

直接 include 不应该有问题

jadexo 发表于 2017-4-18 18:02:01

1.简单除暴的方法就是直接
include() 到你要执行代码的控制器里。

2.优雅一点方案(我是这么认为,毕竟这个是我自己写的方案):

2.1.创建两个libraries库
libraries/Excel.php
libraries/Excelread.php

2.2.在这两个库里做include然后再

libraries/Excel.php
这个文件主要用于写、创建操作


<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

require('PHPExcel.php');

class Excel extends PHPExcel{

}



libraries/Excelread.php
这个主要用户读操作

<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

require('PHPExcel.php');
require('PHPExcel/IOFactory.php');
class Excelread extends PHPExcel_IOFactory{

    private $OBJExcel;
    private $SHEET;

    public $data;
    public $dateFeild;

    function __construct(){
      $this->data = array();
    }

    /**
   * 初始化当前XLS文件读取,并选择需要读取SHEET索引
   * @param int $sheet
   * @throws PHPExcel_Exception
   */
    function init($File,$sheet = 0){
      $this->OBJExcel = PHPExcel_IOFactory::load($File);
      $this->SHEET = $this->OBJExcel->getSheet($sheet);
    }

    /**
   * 如果需要指定某一个sheet那么直接使用该方法并传入索引
   * @param $sheet
   */
    function sheet($sheet){
      $this->data = array();//初始化数据存储对象
      $this->SHEET = $this->OBJExcel->getSheet($sheet);
    }

    /**
   * 构造读取的SHEET中的数据,并转为数组形式
   * @param int $oneRow 从第几行开始作为起始行
   * @param bool $showFeild 是否将第一行作为字段名称,默认为false
   * @throws PHPExcel_Exception
   */
    function ExcelData($oneRow = 0,$showFeild = false,$dateFlag = false){
      $this->data = array();//每次获取需要重新初始化一次
      //获取行数与列数,注意列数需要转换
      $highestRowNum = $this->SHEET->getHighestRow();
      $highestColumn = $this->SHEET->getHighestColumn();
      $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn);

      $filed = array();

      for ($i = $oneRow; $i < $highestColumnNum; $i++) {
            $CellName = PHPExcel_Cell::stringFromColumnIndex($i) . "1";
            $CellVal = $this->SHEET->getCell($CellName)->getValue();
            $filed[] = $CellVal;
      }

      //开始取出数据并存入数组
      $i = $oneRow + 1;
      for($i = $i;$i<=$highestRowNum;$i++){//ignore row 1
            $row = array();
            for($j=0; $j<$highestColumnNum;$j++){
                $cellName = PHPExcel_Cell::stringFromColumnIndex($j).$i;
                $cellVal = $this->SHEET->getCell($cellName)->getValue();
                if($this->isDateValue($j) && $cellVal){//该CELL是否为日期数据
                  $cellVal = gmdate("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($cellVal));
                }

                if($showFeild){
                  $row[ $filed[$j] ] = $cellVal;
                }else{
                  $row[] = $cellVal;
                }

            }
            $this->data []= $row;
      }
    }

    function isDateValue($CELL){
      $rs = false;
      foreach($this->dateFeild as $ROW){
            if($CELL == intval($ROW)){
                $rs = true;
                break;
            }
      }

      return $rs;
    }
}



这样就可以通过

$this->load-> libraries("excel");
$this->load-> libraries("excelread");


2.3.应用范例

一段使用的代码片段:


      $this->load->library("excel");
      $objExcel = new Excel();
      $objWriter = new PHPExcel_Writer_Excel5($objExcel);

      //绘制表格边框 - 针对单个表格
      $DrawBorder = array(
            'borders' => array (
                'outline' => array (
                  'style' => PHPExcel_Style_Border::BORDER_THIN,//设置border样式
                  //'style' => PHPExcel_Style_Border::BORDER_THICK, 另一种样式
                  'color' => array ('argb' => '#000000')    //设置border颜色
                )
            )
      );


      //设置文档基本属性.因为平台的编码的缘故该处不能使用,使用了也会导致乱码
      $objProps = $objExcel->getProperties();
      $objProps->setCreator("MOM");//作者
      $objProps->setLastModifiedBy("MOM");//最后一次保存者
      $objProps->setTitle("MOM The Worktimes for Pro");//标题
      $objProps->setSubject("MOM The Worktimes for Pro");//主题


      ......


到了这部你就是phpexcel的相关操作了。
页: 1 [2]
查看完整版本: CI框架中如何使用PHPExcel导出表格