2014-03-27 32 views
1

我需要將excel文件的信息導入到我的數據庫中,但是我無法使其工作,下面是我正在使用的一些代碼。Yii excel文件不可讀

控制器:

Yii::import('application.extensions.phpexcel.*'); 
     require_once 'excel_reader2.php'; 
     if(!empty($_POST)) 
     { 
      $uploadedFile=$_POST['file']; 
      $data = new Spreadsheet_Excel_Reader($uploadedFile); 

      for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) 
      { 
       for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) 
       { 
       $content = $data->sheets[0]['cells'][$i][$j]; 

       } 
      } 
     } 

表格視圖:

<?php $form=$this->beginWidget('CActiveForm', array(
      'id'=>'excel-form', 
      'enableAjaxValidation'=>false, 
      'action'=>array('/ZfPersonal/Importar'), 
     )); ?> 
     <?php echo CHtml::fileField('file','file'); ?> 
     <?php echo CHtml::submitButton('Importar'); ?> 

的錯誤是

The filename example.xls is not readable. 

謝謝!

編輯

$file=CUploadedFile::getInstanceByName($_POST['file']); 
      $path = $file->saveAs(Yii::app()->basePath.'\..\bolsa\\'.$file); 
      $data = new Spreadsheet_Excel_Reader($path); 

錯誤:

Call to a member function saveAs() on a non-object 
+0

您是否檢查過在http請求中發送了什麼? – darkheir

+0

if echo echo $ _POST ['file'];它打印example.xls,但我認爲問題出現在表單中或我如何獲取該文件。 –

+0

你不應該得到'example.xls',因爲你正在upploading文件,你應該看到一些二進制數據在你的http請求中傳輸。 – darkheir

回答

0

我不知道你的$_POST['file']它包含上傳的文件或文件路徑?

  • 如果這是上傳的文件,在使用Spreadsheet_Excel_Reader之前,應先將文件保存在服務器上。

例子:

$file=CUploadedFile::getInstanceByName('file'); 
if($file !== null) { 
    $file->saveAs('path/to/localFile'); 
    $data = new Spreadsheet_Excel_Reader('path/to/localFile'); 
} else { 
    //The file hasn't been loaded 
} 
  • 如果這是你是給那麼你應該檢查該文件的權限文件的本地路徑:

例子:

var_dump(fileperms($_POST['file'])); 

如果需要更改其許可ons

chmod($_POST['file'], 0644); 
+0

請參閱編輯 –

+0

$ file = CUploadedFile :: getInstanceByName($ _ POST ['file']);是不好的,你應該通過'文件'的方法。然後getInstanceByName可以返回null,如果沒有找到文件,我編輯我的帖子 – darkheir

+0

ok,文件爲空,所以Cuploaded工作不正常 –