PHPExcel_IOFactory :: load throw uncaught异常并导致脚本停止

时间:2013-07-23 19:35:59

标签: php batch-file phpexcel

我已经验证该文件存在,这是我加载文档的脚本

 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

2 个答案:

答案 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