PHPExcel插件不会导入cakephp中的文件

时间:2015-02-09 09:21:25

标签: php cakephp phpexcel

我试图在CAKEPHP中将2010 xlsx文件导入mysql数据库。 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>

有没有人可以帮忙解决这个问题,我搜索了在线教程,使用PHPExcel for CakePHP示例将excel上传到mysql数据库,但找不到任何有意义的内容。

如果您可以解释修复步骤或任何其他方法,那将非常有用。

谢谢。

1 个答案:

答案 0 :(得分:1)

您看到的错误是因为文件路径不正确。它来自这里:https://github.com/PHPOffice/PHPExcel/blob/develop/Classes/PHPExcel/Reader/Excel2007.php#82

因此,请确保将正确的路径传递给identify()函数。 $ inputFileName变量中有什么?为了确保错误来自于此,您可以添加if (!file_exists($inputFileName)) { echo "NOT_THERE"; }语句(或者如果可以,则使用断点。

另外,我不确定CakePHP是如何工作的,但是在上传文件时,您需要使用创建的临时文件的路径。试试这个:

$this->data['Program']['uploadFile']['tmp_name']