繁体   English   中英

PHPExcel:如何检查XLS文件是否有效?

[英]PHPExcel: How to check whether a XLS file is valid or not?

我正在使用PHPExcel 1.7.8来读取由PHPExcel 1.7.8用户上传的.xls文件。 一切都正常使用有效的.xls文件,但现在我想用无效文件进行一些测试,以检查程序是否显示良好的错误消息。

所以我拿了一个.csv文件,并用.xls重命名(没有转换任何东西,只是更改名称)到最后,只是为了检查......
破碎! :)

DOM ELEMENT: HTML
DOM ELEMENT: BODY
DOM ELEMENT: P
START OF PARAGRAPH: 
END OF PARAGRAPH:
FLUSH CELL: A1 => block,date,hour...

array
  1 =>
    array
      'A' => string  'block,date,hour...' (length=2777)

{"step":"error","errors":[],"warnings":[]}

就像你可以看到的那样,显示一条错误消息,我没有要求,然后是我经常写的JSON。

它出现在这一行:

<?php
echo "Loading file\n";
try {
    if (!($objPHPExcel = PHPExcel_IOFactory::load('path'))) {
        echo "Failed\n";
        return;
        // ...
    }
} catch(Exception $e) {
    echo 'Exception !';
}
echo "Done\n";

这段代码显示:

Loading file
/!\ ERROR MESSAGE ABOVE /!\
Done

我的问题是,在尝试解析文件之前,有没有办法用PHPExcel或其他任何方法来检查文件是否是有效的XLS文件

谢谢。

即使这是一年多的问题,我仍然觉得弄清楚如何处理这个问题很麻烦,我会尝试在这里发布我的答案。

如果使用try / catch块不起作用(在我的情况下,我将jpg文件重命名为xls并且错误处理程序不起作用,而不是抛出错误,无效文件只会抛出警告) ,您可以考虑手动检查使用canRead()作为Mark说,这是一个如何使用这个函数的例子。

如果你知道你的文件类型是什么,你可以手动定义它并检查它们:

$valid = false;
$types = array('Excel2007', 'Excel5');
foreach ($types as $type) {
    $reader = PHPExcel_IOFactory::createReader($type);
    if ($reader->canRead($file_path)) {
        $valid = true;
        break;
    }
}

if ($valid) {
  // TODO: load file
  // e.g. PHPExcel_IOFactory::load($file_path)
} else {
  // TODO: show error message
}

希望这能帮助任何有同样问题的人。

PHPExcel中的每个阅读器都有一个canRead()方法,该方法验证传入读取的文件是否为该阅读器的适当格式 - 该方法返回一个简单的布尔值True或False。 从调用PHPExcel_Reader_Excel5类的canRead()方法返回True将确认该读取器可以读取该文件,而不管文件扩展名如何。

IOFactory identify()方法使用此调用,依次针对每个支持的格式对读者进行测试,直到它从canRead()调用获得真正的返回。 反过来,IOFactory load()方法使用identify()来确定哪个Reader应该用于指定的文件。

当您想要为阅读器设置其他参数时,验证文件类型的能力(不依赖于通常会误导的文件扩展名)特别有用。

来自identify()/ load()的回退稍微不那么令人满意:如果canRead()为所有其他读者返回false,则该文件被视为CSV。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM