mam tego pliku wejściowego bootstrap:Jak mogę sprawdzić, czy plik Xls jest edytowalnym plikiem, czy nie, używając phpexcel?
Ten plik wejściowy tylko zaakceptować plik XLS, kiedy wysłać plik xls, najpierw muszę sprawdzić w php, jeśli plik jest tylko do odczytu lub nie i zwróci konkretny numer, ponieważ potrzebuję akceptować tylko edytowalne pliki.
Przykład czego potrzebuję:
wysłać plik XLS, w php sprawdzić czy jest edytowalny plik, jeśli jest edytowalny plik, przejdź do następnego kroku, a jeśli nie jest edytowalny plik, powrót 3 .
to jest tylko do odczytu pliku:
pracuję z phpexcel i kiedy wysłać plik tylko do odczytu, mam kolejny błąd:
To jest mój kod w 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;
}
}
?>
Więc widzę, że domyślnie phpexcel zaakceptować edytować tylko pliki, ale w jaki sposób mogę sprawdzić moją jaźń czy plik xls jest tylko do odczytu lub nie z phpexcel i zwrócić wiadomość?
Przepraszam przez mój angielski.
Twój angielski jest na tyle, aby zrozumieć swoje pytanie mnóstwo dobre. Żadne przeprosiny nie są konieczne. – wallyk
@Wallyk ok, dziękuję – Jeanbf
Tylko dlatego, że plik ma rozszerzenie ".xls", nie oznacza, że jest to plik Excel w formacie BIFF .... ponieważ jest powszechne, że masz csv, SpreadsheetML lub nawet surowe pliki znaczników html z rozszerzeniem .xls .... Powinieneś użyć metody 'idento()' IOFactory, aby określić, czy rzeczywiście jest to format BIFF (zwracany powinien być "Excel5" dla prawdziwego pliku w formacie BIFF) –