2015-11-19 65 views
5

我有這個輸入文件引導:如何使用phpexcel檢查xls文件是否爲可編輯文件?

enter image description here

此輸入文件只接受xls文件,當我發送的XLS文件,首先我需要檢查在PHP如果該文件是隻讀的或不和返回具體的數字,因爲我需要接受只有可編輯的文件。

例子我需要什麼:

我送一個xls文件,在PHP我檢查,如果是一個可編輯的文件,如果是可編輯的文件,繼續下一步,如果不是一個可編輯的文件,返回3 。

這是一個只讀文件:

enter image description here

我phpexcel工作,當我發送一個只讀文件,我有一個錯誤:

enter image description here

這是我在PHP代碼:

<?php 

require "dao/daoExcel.php"; 
require "vendor/autoload.php"; 

class ControllerExcel { 

    private $aDatosExcel; 

    public function setDataExcel($dataexcel) { 

     $estado = true; 

     if($this->moverArchivo($dataexcel)==false){ 
      $estado = false; 
     } 

     if($estado == true && $this->validaHeaders($dataexcel)==false){ 
      $estado = false; 
      return 2; 
     } 

     if($estado == true){ 
      return $this->setInsertExcel($dataexcel); 
     } 

    } 

    public function moverArchivo($dataexcel) { 


     $fileName = $_FILES["archivo"]["name"]; 
     $fileTmpLoc = $_FILES["archivo"]["tmp_name"]; 
     $aHeader = new DaoExcel(); 
     $excelUrl = $aHeader->getHeaderExel($dataexcel); 

     $pathAndName = $excelUrl[17]['par_valor'].$fileName; 

     $moveResult = move_uploaded_file($fileTmpLoc, $pathAndName); 
     if ($moveResult == true) { 
      return true; 
     }else{ 
      return false; 
     } 

    } 

    public function validaHeaders($dataexcel){ 

     $inputFileType = 'Excel5'; 
     $aHeader = new DaoExcel(); 
     $excelHead = $aHeader->getHeaderExel($dataexcel); 
     $inputFileName = $excelHead[17]['par_valor'].$_FILES["archivo"]["name"]; 
     $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
     $objPHPExcel = $objReader->load($inputFileName); 

     $h1 = $objPHPExcel->getActiveSheet()->getCell('A1')->getValue(); 
     $h2 = $objPHPExcel->getActiveSheet()->getCell('B1')->getValue(); 
     $h3 = $objPHPExcel->getActiveSheet()->getCell('C1')->getValue(); 
     $h4 = $objPHPExcel->getActiveSheet()->getCell('D1')->getValue(); 
     $h5 = $objPHPExcel->getActiveSheet()->getCell('E1')->getValue(); 

     $header = $h1."###".$h2."###".$h3."###".$h4."###".$h5; 

     if($excelHead[16]['par_valor'] == $header){ 
      return true; 
     }else{ 
      return false; 
     } 

    } 

    public function setInsertExcel($dataexcel){ 

     $inputFileType = 'Excel5'; 
     $aHeader = new DaoExcel(); 
     $excelHead = $aHeader->getHeaderExel($dataexcel); 
     $inputFileName = $excelHead[17]['par_valor'].$_FILES["archivo"]["name"]; 
     $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
     $objPHPExcel = $objReader->load($inputFileName); 
     $contRows = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); 

     for($i=2;$i<=$contRows;$i++){ 
      $h1 = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue(); 
      $h2 = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getValue(); 
      $h3 = $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getValue(); 
      $h4 = $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getValue(); 
      $h5 = $objPHPExcel->getActiveSheet()->getCell('E'.$i)->getValue(); 
      $aDatos['ac_no']=$h1; 
      $aDatos['custom_no']=$h2; 
      $aDatos['nombre']=$h3; 
      $aDatos['marc']=$h4; 
      $aDatos['estado']=$h5; 
      $aDatos['fecha_registro']=$this->setFecha(); 
      $aDatos['rco_oculto']=0; 
      $this->aDatosExcel[]=$aDatos; 
     } 
     return $aHeader->insertDatosExcel($this->aDatosExcel); 
    } 

    private function setFecha(){ 

     date_default_timezone_set("America/Santiago"); 
     $now = time(); 
     putenv("TZ=America/Santiago"); 
     $fecha=date("Y-m-d H:i:s",$now); 
     $date=date("Y/m/d H:i:s", strtotime($fecha)); 
     return $date; 

    } 

} 

?> 

所以我看到,默認情況下,phpexcel只接受可編輯的文件,但我怎麼能在我的自我檢查,如果xls文件是隻讀或不用phpexcel,並返回一條消息?

對不起,我的英語。

+0

你的英語足夠好足夠的瞭解你的問題。沒有道歉是必要的。 – wallyk

+0

@wallyk好的,謝謝 – Jeanbf

+2

僅僅因爲一個文件具有'.xls'的擴展名,並不意味着它是一個BIFF格式的Excel文件....因爲通常有csv,SpreadsheetML甚至原始的html標記文件擴展名爲.xls ....您應該使用IOFactory的'identify()'方法來確定它是否真的是BIFF格式(對於真正的BIFF格式文件,返回應該是「Excel5」) –

回答

0
echo $objPHPExcel->getSecurity()->isSecurityEnabled() ? 'some security is enabled' : 'no security is enabled'; 

source