CodeIgniter with PHPExcel fatal error cannot redeclare class IOFactory

后端 未结 3 419
情书的邮戳
情书的邮戳 2021-01-25 18:10

I\'m trying to use PHPExcel with CodeIgniter.

My problem is when i want to use this method below, I got PHP Fatal Error : Cannot redeclare class IOFactory

相关标签:
3条回答
  • 2021-01-25 18:48

    No need to write

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

    Just start with

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

    Edited :::

    In my project I have done by these way,

    Step1: in libraries\PHPExcel\Reader

    Rename Excel5.php to PHPExcel_Reader_Excel5.php

    Step2:

    $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);
    
    0 讨论(0)
  • 2021-01-25 18:53

    You could try this one and it works for me:

    $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);
    
    0 讨论(0)
  • 2021-01-25 19:00

    all

    I am using PHPExcel to upload data from Excel in Mysql with CI and grocery_CRUD. This is my way:

    // My 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() {
        }
    }
    ?>
    

    //My Excel CI Model

    <?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;
        }
    }
    ?>
    

    // My Controller to call method

    <?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';
            }
        }
    }
    ?>
    

    // My Folder where I put PHPExcel Lib in CI

    enter image description here

    0 讨论(0)
提交回复
热议问题