我试图在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数据库,但找不到任何有意义的内容。
如果您可以解释修复步骤或任何其他方法,那将非常有用。
谢谢。
答案 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']