我正在尝试将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)。
答案 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的文件夹
答案 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);