【问题标题】:How can I check if a xls file is editable file or not, using phpexcel?如何使用 phpexcel 检查 xls 文件是否为可编辑文件?
【发布时间】:2016-02-22 01:51:03
【问题描述】:

我有这个输入文件引导程序:

这个输入文件只接受xls文件,当我发送xls文件时,首先我需要检查php是否只读取文件并返回一个特定的数字,因为我只需要接受可编辑的文件。

我需要的示例:

我发送一个xls文件,在php中我检查是否是可编辑文件,如果是可编辑文件,继续下一步,如果不是可编辑文件,则返回3。

这是一个只读文件:

我使用 phpexcel,当我发送只读文件时,出现下一个错误:

这是我在 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 读取,并返回消息?

对不起,我的英语不好。

【问题讨论】:

  • 您的英语足够好,足以理解您的问题。没有必要道歉。
  • @wallyk 好的,谢谢
  • 仅仅因为一个文件具有.xls 扩展名,并不意味着它是一个 BIFF 格式的 Excel 文件......因为通常有 csv、SpreadsheetML 甚至原始 html 标记文件.xls 的扩展名......您应该使用 IOFactory 的 identify() 方法来确定它是否真的是 BIFF 格式(对于真正的 BIFF 格式文件,返回应该是 Excel5
  • 如果您在 MS EXcel 中打开文件,然后执行“另存为”,那么“另存为类型”选择器下拉菜单也应该会告诉您文件的真正格式
  • @MarkBaker 嗨,对不起,我是新使用 phpexcel 的新手,你能告诉我一个建议,详细说明如何正确使用 identify() 与我的代码相关吗?,我需要在我的代码中:"如果是只读文件,返回3,如果不是只读文件,继续下一步"

标签: php phpexcel xls


【解决方案1】:
echo $objPHPExcel->getSecurity()->isSecurityEnabled() ? 'some security is enabled' : 'no security is enabled';

source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2013-04-20
    • 2015-11-29
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多