Rumah  >  Artikel  >  pembangunan bahagian belakang  >  紧急求助!Codeigniter无法调用PHPExcel

紧急求助!Codeigniter无法调用PHPExcel

WBOY
WBOYasal
2016-06-23 14:04:201010semak imbas

我是初学Codeigniter,使用其文件上传类将csv或者excel文件上传,同时,使用过PHPExcel来读取内容,装入数据库。我的程序如下:
controllers/products.php文件:

        $memsn = $this->session->userdata('MEMSN');
$this->load->library('Excel_Read_Operat');
$groups = array('purchaser', 'salesman', 'viewer','merchant');
        if ($this->ion_auth->in_group($groups))
{
$this->session->set_flashdata('message', $this->lang->line("access_denied"));
$data['message'] = (validation_errors() ? validation_errors() : $this->session->flashdata('message'));
redirect('module=products', 'refresh');
}

$this->form_validation->set_rules('userfile', $this->lang->line("upload_file"), 'xss_clean');

if ($this->form_validation->run() == true)
{
    if ( isset($_FILES["userfile"])){
                $this->load->library('upload_photo');

$dest_dir = 'uploads/'.$memsn.'/';

$this->dest_dir_fortest = $dest_dir;

if($this->upload_photo->direct_is_exists($dest_dir)){

}else{
    redirect("module=products&view=upload_csv", 'refresh');
}

$config['upload_path'] = $dest_dir;
$config['allowed_types'] = 'csv|xls|xlsx';
$config['max_size'] = '2048';
$config['overwrite'] = TRUE;

$old_file_name = $_FILES["userfile"]["name"];
$new_file_name = $this->getSystemTime().$_FILES["userfile"]["name"];
$config['file_name'] = $new_file_name;

//Initialize
$this->upload_photo->initialize($config);

if( ! $this->upload_photo->do_upload()){

//echo the errors
$error = $this->upload_photo->display_errors();
$this->session->set_flashdata('message', $error.$dest_dir);
redirect("module=products&view=upload_csv", 'refresh');
}


if ($this->upload_photo->file_ext == '.csv') {

$csv = $this->upload_photo->file_name;


Excel_Read_Operat::initialized($dest_dir.$new_file_name);


$phpexcel_csv_arr_table = Excel_Read_Operat::GetArrTable_CVS();


if(!empty($phpexcel_csv_arr_table)){
                    $keys = array('code','name','category_id','STATUS','DESCRIPTION','DECDESCTION','CUSTPRICE','LENGTH','HEIGHT','WIDTH','STATUS');
    $final = array();

foreach ($phpexcel_csv_arr_table as $row_csv_value){

$final[] = array_combine($keys, $value);

foreach($final as $csv_pr) {
if($this->products_model->getProductByCode($csv_pr['code'])) {
     $this->session->set_flashdata('message', $this->lang->line("check_product_code")." (".$csv_pr['code']."). ".$this->lang->line("code_already_exist"));
redirect("module=products&view=upload_csv", 'refresh');
}

}

}

在libraries/下,有Excel_Read_Operat.php类文件,和Excel文件夹,文件夹下是PHPExcel.php和PHPExcel文件夹。Excel_Read_Operat.php类如下:

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Excel_Read_Operat {

public $_filepath;

private $_arrayTable;

private $_Feature;

public static Function initialized($filepath){
if (file_exists($filePath)) {
$this->_filepath = $filepath;
}else{
return array();
}
}

public static Function GetData($val) {
$jd = GregorianToJD ( 1, 1, 1970 );
$gregorian = JDToGregorian ( $jd + intval ( $val ) - 25569 );
return $gregorian;

}

public static  Function GetArrTable_CVS(){

require_once 'EXCEL/PHPExcel.php';

require_once 'EXCEL/PHPExcel/IOFactory.php';

$PHPReader_CSV = new PHPExcel_Reader_CSV();

$file_ext=strtolower(pathinfo($this->_filepath, PATHINFO_EXTENSION));

$PHPReader_CSV->setInputEncoding('GBK');

$PHPReader_CSV->setDelimiter(',');

if(!$PHPReader_CSV->canRead($this->_filepath)){
return array();
}

$PHPExcel = $PHPReader_CSV->load($this->_filepath);

$currentSheet = $PHPExcel->getSheet ( 0 );

$allColumn = $currentSheet->getHighestColumn ();
$allColumn = PHPExcel_Cell::columnIndexFromString ( $allColumn );

$allRow = $currentSheet->getHighestRow ();

echo 'row is : '.$allRow.'
';
echo 'allColumn is : '.$allColumn.'
';


for($currentRow = 2; $currentRow 
for($currentColumn = 0; $currentColumn  $val = $currentSheet->getCellByColumnAndRow ( $currentColumn , $currentRow )->getValue ();

$this->_Feature[$currentColumn] = $val;

}


$this->_arrayTable [$currentRow] = $this->_Feature;

}

echo "\n";

return $this->_arrayTable;

}

public static Function GetArrTable_Excel() {

require_once 'EXCEL/PHPExcel.php';
require_once 'EXCEL/PHPExcel/IOFactory.php';

$PHPReader = new PHPExcel_Reader_Excel2007 ();
if (! $PHPReader->canRead ( $this->_filepath )) {
$PHPReader = new PHPExcel_Reader_Excel5 ();
if (! $PHPReader->canRead ( $this->_filepath )) {
echo 'no Excel';
return;
}
}

$PHPExcel = $PHPReader->load ( $this->_filepath );

$currentSheet = $PHPExcel->getSheet ( 0 );

$allColumn = $currentSheet->getHighestColumn ();
$allColumn = PHPExcel_Cell::columnIndexFromString ( $allColumn ); 

$allRow = $currentSheet->getHighestRow ();

echo 'row is : '.$allRow.'
';
echo 'allColumn is : '.$allColumn.'
';


for($currentRow = 2; $currentRow 
for($currentColumn = 0; $currentColumn  $val = $currentSheet->getCellByColumnAndRow ( $currentColumn , $currentRow )->getValue ();

$this->_Feature[$currentColumn] = $val;

}


$this->_arrayTable [$currentRow] = $this->_Feature;

}
echo "\n";

return $this->_arrayTable;
}

}

?>

我要调用GetArrTable_CVS这个方法,将表格中的数据读出来,然后放到数组表中返回,为什么我这里不能用require_once啊?我该怎么来调用PHPExcel呢?请指教了。谢谢


回复讨论(解决方案)

require_once 'EXCEL/PHPExcel.php';
require_once 'EXCEL/PHPExcel/IOFactory.php';
应放在程序文件的开始处
并确认路径是正确的

放在文件开始的地方,整个程序都无法运行了。我发现这两句放哪里哪里不能运行,太奇怪了。

路径应该是对的,就在同一个目录下,麻烦您给看看

给出错误信息!

麻烦问下,我去哪里找错误信息呢?

require_once、require 失败则必然有错误信息
这与在哪里找,要看你的 php.ini 的设置
如果 display_errors = On 则会显示在页面中

我按照你说的设置了,可是没有错误信息出来哦。是不是在程序里要写什么显示错误信息的语句啊?

这个问题已经解决了,天啊,试了好多好多的方法!!!头大。不过谢谢版主了

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn