0

ファイルが存在することを確認しました。これはドキュメントをロードするスクリプトです

 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); しかし、別の問題は、この方法で作業しているときに、日付列を正しく読み取れないことです。

私の質問は、どうすればこの種のエラーをキャッチできますか?

助けてください、私もこれを読みました。 マーク・ベイカー(phpexcelの作者) 日付型カラムの説明

4

2 に答える 2

2

「不明なタイプ」のグラフィックを含む Excel ファイルから画像を読み取ろうとしたときに、同じエラー メッセージが表示されました。そこで、Excel5.php に不足しているステートメントを次のように追加することで解決しました。

検索して置換:

$BSEindex = $spContainer->getOPT(0x0104);

と:

$BSEindex = $spContainer->getOPT(0x0104);
if (empty($BSEindex)) break;

それでおしまい!Excel5.php ファイルは PHPExcel ディストリビューションの一部であり、置き換える必要がある行はさまざまです。

于 2014-08-30T18:37:51.750 に答える
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

于 2013-07-24T21:14:45.123 に答える