Я пытаюсь использовать PHPExcel с CodeIgniter.
Моя проблема в том, когда я хочу использовать этот метод ниже, я получил PHP Fatal Error: не могу переопределить класс IOFactory
Если вы сомневаетесь в типе файла, вы можете использовать метод ident () для заводского метода IO для идентификации читателя, который вам нужен, прежде чем использовать метод 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 уже создан где-то, но не может его найти.
FYI, используя последнюю версию CodeIgniter (2.1) и PHPExcel (1.7.6) на момент написания.
Нет необходимости писать
$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);
все
Я использую PHPExcel для загрузки данных из Excel в Mysql с помощью CI и grocery_CRUD. Это мой путь:
// Мой 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 eg (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
Вы можете попробовать это, и это работает для меня:
$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);