PHPExcel не может прочитать файл

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

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

/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 – это файл, который я выбираю из формы


person Anuj TBE    schedule 23.08.2016    source источник
comment
Это потому, что вы загрузили файл, но еще не использовали move_uploaded_file(), так что это всего лишь временный файл; вы должны использовать $inputFileName['tmp_name']   -  person Mark Baker    schedule 23.08.2016
comment
Я тоже использовал tmp_name, но все та же ошибка. Не пробовал move_uploaded_file() . Но какое это имеет отношение к сохранению файлов на сервере. Нельзя ли это сделать напрямую?   -  person Anuj TBE    schedule 23.08.2016
comment
move_uploaded_file()   -  person Mark Baker    schedule 23.08.2016
comment
что вы имеете в виду под «все той же ошибкой», что именно вы пробовали из комментария Марка?   -  person arilia    schedule 23.08.2016
comment
@arilia @mark сказал, что вы должны использовать $inputFileName['tmp_name] . Я уже пробовал это с ошибкой как expects parameter 1 to be string   -  person Anuj TBE    schedule 23.08.2016
comment
и это странно, поскольку $inputFileName['tmp_name] является строкой. У вас есть два вхождения inputFileName, вы заменили оба на $inputFileName['tmp_name]?   -  person arilia    schedule 23.08.2016


Ответы (1)


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

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

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

Спасибо :)

person Kamlesh Gupta    schedule 23.08.2016