2016-08-23 3 views
0

Я использую библиотеки CakePHP 3.2 и PHPExcel для импорта данных из листа excel в базу данных.PHPExcel не в состоянии прочитать файл

У меня есть библиотека на

/vendor/PHPExcel/Classes/PHPExcel.php 
/vendor/PHPExcel/Classes/PHPExcel/IOFactory.php 

и действие в контроллере

public function bulkUpload() 
{ 
    $inputFileName = $this->request->data('excel_data'); 
    //debug($inputFileName['name']); 
    if ($inputFileName != '') { 
    $inputFileType = \PHPExcel_IOFactory::identify($inputFileName); 
    $objReader = \PHPExcel_IOFactory::createReader($inputFileType); 

    $objReader->setReadDataOnly(true); 
    $objPHPExcel = $objReader->load($inputFileName); 
    $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); 
    $highestRow = $objWorksheet->getHighestRow(); 

    for ($row = 2; $row <= $highestRow; ++$row) { 
     $this->data['Program']['cycle_month'] = $objWorksheet->getCellByColumnAndRow(1, $row)->getValue(); 
     $this->data['Program']['cycle_year'] = $objWorksheet->getCellByColumnAndRow(2, $row)->getValue(); 
     $this->data['Program']['media_partnum'] = $objWorksheet->getCellByColumnAndRow(3, $row)->getValue(); 

     $resultArray[$row-2] = $this->data['Program']; 
    } 

     debug($resultArray); 
    } 
} 

Но это дает ошибку как

pathinfo() expects parameter 1 to be string, 
array given [ROOT/vendor/PHPExcel/Classes/PHPExcel/IOFactory.php, line 225] 

и

file_exists() expects parameter 1 to be a valid path, 
array given [ROOT/vendor/PHPExcel/Classes/PHPExcel/Reader/Excel2007.php, line 72] 

и debug($inputFileName); дает

[ 
    'name' => 'testing.xlsx', 
    'type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
    'tmp_name' => '/tmp/phpvDWDxG', 
    'error' => (int) 0, 
    'size' => (int) 5247 
] 

замена $inputFileName; с $inputFileName['name'] в

$inputFileType = \PHPExcel_IOFactory::identify($inputFileName); 

удаляет выше двух ошибок, но дает ошибку в

Could not open testing.xlsx for reading! File does not exist. 

Здесь testing.xlsx это файл, я выбор из формы

+1

Это потому, что вы загрузили файл, но еще не использовали 'move_uploaded_file()', так что это еще только временный файл; вы должны использовать '$ inputFileName ['tmp_name']' –

+0

Я использовал 'tmp_name' тоже, но все равно такую ​​же ошибку. Не пробовал 'move_uploaded_file()'. Но что он должен делать с сохранением файлов на сервере. Не может ли это быть сделано напрямую? –

+0

[move_uploaded_file()] (http://nl3.php.net/manual/en/function.move-uploaded-file.php) –

ответ

0
You need to add file like below: 

require_once(ROOT. DS .'vendor'.DS.'PHPExcel/Classes/PHPExcel.php'); 
require_once(ROOT . DS . 'vendor' . DS.'PHPExcel/Classes/PHPExcel/IOFactory.php'); 

y0ou also need to add a namespace like below 

use PHPExcel; 
use IOFactory; 

Now you can access excel class library and easily read and write 

Я использую это в моем проекте.

вы можете попробовать.

Спасибо :)