CI框架中如何使用PHPExcel导出表格
最新在研究PHPExcel,在本地文件已经可以实现导出功能,但是将PHPExcel整合至CI时报错:不能重新定义Iofactory classA PHP Error was encounteredSeverity: Compile Error
Message: Cannot redeclare class Iofactory
Filename: PHPExcel/Iofactory.php
Line Number: 46
Backtrace:
但不知如何修改,我是这样安装PHPExcel的:
1) 解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:
-- application\libraries\PHPExcel.php
-- application\libraries\PHPExcel (文件夹)
2)修改application\libraries\PHPExcel\IOFactory.php 文件
--将其文件名改为Iofactory.php
-- 将其类名从PHPExcel_IOFactory改为Iofactory。
-- 将其构造函数改为public
请问各位还需修改那处,或哪里修改有问题么?
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的相关操作了。
忘了贴了,控制器中的调用语句:
$this->load->library('PHPExcel');
$this->load->library('PHPExcel/Iofactory'); 扛着大炮的佬宝 发表于 2017-4-16 19:04
我也有个这个问题。楼主怎么解决呀
直接 include 不应该有问题 顶一顶,等待大神解答。 直接include文件,应该可以吧:lol 建议您看一下这个:
http://codeigniter.org.cn/forums/thread-17590-1-1.html
不知道你能否用得上。 load这个:PHPExcel.php 大神,你的功能写好了么?能不能给小弟源码膜拜膜拜!之前也没写过 :lol:lol:lol:lol:lol 把网上的导出例子加入,把数据进行循环遍历就可以导出来数据来,由于没有之前的代码了,就不贴了 我也有个这个问题。楼主怎么解决呀
页:
[1]
2