![](/img/trans.png)
[英]How can I check if a xls file is editable file or not, using phpexcel?
[英]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.