我已经验证该文件存在,这是我加载文档的脚本
try{
$this->obj_global = PHPExcel_IOFactory::load($this->file_name);
$err_msgs = '';
}catch(ErrorException $e)
{
$err_msgs = $e.getMessage();
}catch (Exception $e)
{
$err_msgs = $e.getMessage();
}
我读了我的日志并发现,来自Excel5.php第995行的错误消息包含“在非对象上调用成员函数getBlipType()”,因为我相信,解析器尝试加载图形对象和失败。 顺便说一句,我试着阅读phpexcel论坛,但没有发现任何问题。我不知道这是一个错误还是来自我损坏的excel文件的问题。但幸运的是,当我尝试更改我的加载器脚本并设置我的阅读器setReadDataOnly(true)时,我可以正确加载和读取该文件而没有任何错误;但另一个问题是,使用此方法时,我无法正确读取我的日期列。
我的问题是,我怎么能抓住这种类型的错误,我试图抓住它但它不起作用,脚本只是暂停?
请任何帮助,我也读过这个。 mark baker(the author of phpexcel) explaination about date type column
答案 0 :(得分:2)
当我尝试从包含"未知类型"的图形的Excel文件中读取图像时,我收到了相同的错误消息。因此,解决方案是在Excel5.php中添加缺少的语句,如下所示。
查找并替换:
$BSEindex = $spContainer->getOPT(0x0104);
使用:
$BSEindex = $spContainer->getOPT(0x0104);
if (empty($BSEindex)) break;
那就是它! Excel5.php文件是PHPExcel发行版的一部分,您需要替换的行有所不同。
答案 1 :(得分:0)
我想我只是找到了我自己问题的解决方案,我发布了这个目的,如果有人有类似的问题。根据问题,我只需要知道哪个文件无法通过phpexcel处理,我就开始使用php函数register_shutdown_function(回调函数[,混合参数[,混合...]]), 我这样用它。
register_shutdown_function( "clean_exit" );
function clean_exit()
{
if ( @is_array( $e = @error_get_last() ) ) {
$code = isset( $e['type'] ) ? $e['type'] : 0;
$msg = isset( $e['message'] ) ? $e['message'] : '';
$file = isset( $e['file'] ) ? $e['file'] : '';
$line = isset( $e['line'] ) ? $e['line'] : '';
/*if fatal error then check, the source of error*/
if ( $code == 1 ) {
/*update imported table by current_id_import*/
//look for , if it caused by PHPExcel then update imported table
$match = preg_match('/phpexcel/i', $file);
if($match==1)
{
/*if errors caused by phpexcel then do stuff*/
}
}
}
}
发生致命错误时会调用此函数。 这样我就可以记录任何引发致命错误的文件,解决问题。 :d