Я пытаюсь импортировать файл xlsx 2010 в mysql db в CAKEPHP. Плагин PHPExcel используется для операций excel.
Я сталкиваюсь с проблемами ниже.
Ошибка 1 : я вижу ниже ошибку при запуске моего представления
Notice (8): Undefined index: Program [APP\Controller\ProgramsController.php, line 83]
Проблема 2 :: При просмотре xlsx-файла из представления и при нажатии кнопки отправки я вижу ниже ошибку. Не удалось открыть import.xlsx для чтения! Файл не существует.
Error: An Internal Error Has Occurred. Stack Trace APP\Vendor\PHPExcel\IOFactory.php line 268 → PHPExcel_Reader_Excel2007->canRead(string) APP\Vendor\PHPExcel\IOFactory.php line 205 → PHPExcel_IOFactory::createReaderForFile(string) APP\Controller\ProgramsController.php line 87 → PHPExcel_IOFactory::identify(string) [internal function] → ProgramsController->importexcel() CORE\Cake\Controller\Controller.php line 490 → ReflectionMethod->invokeArgs(ProgramsController, array) CORE\Cake\Routing\Dispatcher.php line 191 → Controller->invokeAction(CakeRequest) CORE\Cake\Routing\Dispatcher.php line 165 → Dispatcher->_invoke(ProgramsController, CakeRequest) APP\webroot\index.php line 108 → Dispatcher->dispatch(CakeRequest, CakeResponse)
Ниже мой код от контроллера
<?php App::import('Helper', 'Number'); include '../vendor/PHPExcel.php'; include '../vendor/PHPExcel/IOFactory.php'; class ProgramsController extends AppController { var $name = 'Programs'; var $helpers = array('Html', 'Form', 'Time','PhpExcel','Js' => array('Jquery') ); var $uses = array('Program','Customer'); public $components = array('PhpExcel'); function importexcel() { $inputFileName = $this->data['Program']['uploadFile']; 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']; } if ($this->Program->saveAll($resultarray)) { $this->Session->setFlash(__('The Program have been saved', true)); } } } } ?>
И мой код просмотра выглядит следующим образом.
<?php echo $this->Form->create('Program',array('id' =>'importexcel','type'=>'post','action'=>'importexcel','url' => array('controller' => 'programs'))); ?> <table> <tbody> <tr> <td>Choose Your File:</td> <td><input width=200 type="file" name="data[Program][uploadFile]"></td> <td> <div> <?php echo $this->Form->submit('Import Program', array('div'=>false,'name'=>'importexcel')); ?> </div> </td> </tr> </tbody> </table>
Кто-нибудь может помочь устранить проблему, я искал онлайн-учебники для загрузки excel в базу данных mysql с использованием PHPExcel для CakePHP-примеров, но не смог найти ничего значимого.
Если бы вы могли объяснить шаги для исправления или любой другой способ сделать это, это было бы очень полезно.
Спасибо.
Вы видите ошибку, поскольку путь к файлу неверен. Это происходит отсюда: https://github.com/PHPOffice/PHPExcel/blob/develop/Classes/PHPExcel/Reader/Excel2007.php#82
Поэтому убедитесь, что вы передали правильный путь для функции ident (). Что входит в переменную $ inputFileName? Чтобы быть уверенным, что ошибка исходит из этого, вы можете добавить if (!file_exists($inputFileName)) { echo "NOT_THERE"; }
if (!file_exists($inputFileName)) { echo "NOT_THERE"; }
(или используйте точки останова, если можете.
Кроме того, я не уверен, как работает CakePHP, но при загрузке файла вам нужно использовать путь к создаваемому временному файлу. Попробуй это:
$this->data['Program']['uploadFile']['tmp_name']