具有PHPExcel致命错误的CodeIgniter无法重新声明类IOFactory

时间:2012-05-18 02:22:29

标签: php codeigniter phpexcel

我正在尝试将PHPExcel与CodeIgniter一起使用。

我的问题是,当我想在下面使用此方法时,我得到 PHP致命错误:无法重新声明类IOFactory

  

如果您不确定文件类型,可以使用IO Factory的identify()方法识别所需的阅读器,然后再使用createReader()方法实例化阅读器对象。

以下是我的代码:

$this->load->library('PHPExcel');

$this->load->library('PHPExcel/IOFactory');

$path = $upload_data['full_path'];

$inputFileType = PHPExcel_IOFactory::identify($path);

$objReader = PHPExcel_IOFactory::createReader($inputFileType);

$objPHPExcel = $objReader->load($path);

$objWorksheet = $objPHPExcel->getActiveSheet();

我试图找出IOFactory类是否已在某处创建但无法找到它。

仅供我们使用最新版本的CodeIgniter(2.1)和PHPExcel(1.7.6)。

3 个答案:

答案 0 :(得分:1)

无需撰写

$this->load->library('PHPExcel');

刚开始

$this->load->library('PHPExcel/IOFactory');

已编辑:::

在我的项目中,我已经通过这些方式完成了,

步骤1: 在libraries\PHPExcel\Reader

Excel5.php重命名为PHPExcel_Reader_Excel5.php

第2步:

$filePath = $dir.$uploadedfile;
$objReader = $this->load->library('PHPExcel/Reader/PHPExcel_Reader_Excel5', $filePath);
$objReader = new PHPExcel_Reader_Excel5();
$objPHPExcel = $objReader->load($filePath);     
$rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();                        
$sheet = $objPHPExcel->getActiveSheet();
$maxRowIndex = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$maxColIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

答案 1 :(得分:1)

所有

我正在使用PHPExcel通过CI和grocery_CRUD从Mysql中的Excel上传数据。这是我的方式:

//我的Excel CI Lib

<?php

if (!defined('BASEPATH'))     exit('No direct script access allowed');
require_once APPPATH . "/third_party/PHPExcel/IOFactory.php";
/*
 * PHPExcel Lib For CI
 *
 * Class Excel
 *
 * Using PHP Excel Class
 */
class Lib_excel extends PHPExcel_IOFactory {
    public function __construct() {
    }
}
?>

//我的Excel CI模型

<?php
// My CI Model for handling all Excel methods
if (!defined('BASEPATH'))     exit('No direct script access allowed');
// Class Model extend with CI Model
class Mod_excel extends CI_Model {
    function __construct() {
        // Call the Model constructor
        parent::__construct();
    }
    /**
     * Read data from Excel file
     * 

     * @input string $excelFileName
     * @input string $columnName (starting column point)
     * @input string $startRow (starting column point)
     * @return array $cellValues
     *
     * @example code
     *  $excelFileName = $_FILES['uploadedfile']['tmp_name'];
     *  $columnName = 'B';
     *  $startRow = '2';
     *  $cellValues = readWithExcel($excelFileName, $columnName, $startRow);
     *  $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($cellValues));
     *  foreach($iterator as $value) {
     *      $insert_data[] = $value;
     *  }
     */
    function readWithExcel($excelFileName, $columnName, $startRow) {
        //load our new Lib Excel library as object excel
        $this->load->library('Lib_excel', null, 'excel');
        // load excel file
        $objPHPExcel  = $this->excel->load($excelFileName);
        // get active sheets
        $objWorksheet = $objPHPExcel->getActiveSheet();
        // get highest row column
        $lastRow      = $objWorksheet->getHighestRow();
        // check cell value empty or not
        for ($i = $startRow; $i < $lastRow; $i++) {
            $colB = $objPHPExcel->getActiveSheet()->getCell($columnName . $i)->getValue();
            if ($colB == NULL || $colB == '') {
                die('The Cell' . ' <strong>B' . $i . '</strong> is empty. Please, remove or fill with data');
            }
        }
        // get excel data with range e.g. (B2:B56)
        $cellValues = $objPHPExcel->getActiveSheet()->rangeToArray("$columnName$startRow:$columnName$lastRow");
        // return all data as array
        return $cellValues;
    }
}
?>

//我的控制器调用方法

<?php
// My Admin Controller with grocery CRUD createCouponCode method (URL: admin/createCouponCode)
if (!defined('BASEPATH'))     exit('No direct script access allowed');
class Admin extends CI_Controller {
    /**
     * Just construct method to load 
     */
    function __construct() {
        parent::__construct();
        // Load Model excel and use as object ModExcel
        $this->load->model('Mod_excel', 'ModExcel', true);
        // Load CRUD lib
        $this->load->library('grocery_CRUD');
    }
    /**
     * Upload Coupon Code from Excel
     */
    public function createCouponCode() {
        $crud = new grocery_CRUD();
        $crud->set_table('coupon_code');
        $crud->fields('coupon_no');
        $crud->columns('coupon_no');
        $crud->set_subject('Coupon');
        $crud->required_fields('coupon_no');
        $crud->set_field_upload('coupon_no', '../public/uploads/');
        $crud->callback_before_upload(array(
            $this,
            '_excel_uploaded_file'
        ));
        $output = $crud->render();
        $this->_example_output($output);
    }
    /**
     * Call back Function form CRUD Upload
     * @param array $files_to_upload
     * @param array $field_info
     * @return string
     */
    function _excel_uploaded_file($files_to_upload = array(), $field_info = array()) {
        $insert_data   = array();
        $ext           = '';
        $file_tmp_path = '';
        foreach ($files_to_upload as $value) {
            $ext           = pathinfo($value['name'], PATHINFO_EXTENSION);
            $file_tmp_path = $value['tmp_name'];
        }
        $allowed_formats = array(
            "xlsx"
        );
        if (in_array($ext, $allowed_formats)) {
            $excelFileName = $file_tmp_path;
            $columnName    = 'B';
            $startRow      = '2';
            $cellValues    = $this->ModExcel->readWithExcel($excelFileName, $columnName, $startRow);
            $iterator      = new RecursiveIteratorIterator(new RecursiveArrayIterator($cellValues));
            foreach ($iterator as $value) {
                $insert_data[] = array(
                    'coupon_no' => $value
                );
            }
            $this->output->enable_profiler(TRUE); //Turns on CI debugging
            $this->db->insert_batch('coupon_code', $insert_data);
            echo ($status) ? true : false;
        } else {
            return 'Error: Wrong file format. Use Excel 2007 format';
        }
    }
}
?>

//我将PHPExcel Lib放入CI的文件夹

enter image description here

答案 2 :(得分:0)

你可以尝试这个,它对我有用:

$filePath = "uploads/import/test.xlx";                                  
$this->load->library('PHPExcel');                         
$objReader = new PHPExcel_Reader_Excel5();                        
$objPHPExcel = $objReader->load($filePath);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);