3

radom ユーザーがアップロードしたファイルの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

私の質問は、ファイルを解析する前に、ファイルが有効な XLS ファイルであるかどうかを PHPExcel などで確認する方法はありますか?

ありがとうございました。

4

2 に答える 2

12

PHPExcel の各リーダーには、読み取りに渡されたファイルがそのリーダーに適した形式であることを検証する canRead() メソッドがあります。このメソッドは、単純なブール値の True または False を返します。PHPExcel_Reader_Excel5 クラスの canRead() メソッドの呼び出しから True が返されると、ファイル拡張子に関係なく、そのリーダーがファイルを読み取ることができることが確認されます。

IOFactory identify() メソッドはこの呼び出しを使用し、canRead() 呼び出しから true が返されるまで、サポートされている各形式のリーダーに対して順番にテストします。次に、IOFactory の load() メソッドは、identify() を使用して、指定されたファイルに使用するリーダーを決定します。

リーダーに追加の引数を設定したい場合、ファイルタイプを検証する機能 (誤解を招きやすいファイル拡張子に依存しない) は特に便利です。

identify()/load() からのフォールバックは少し満足度が低くなります: canRead() が他のすべてのリーダーに対して false を返す場合、ファイルは CSV として扱われます。

于 2012-11-29T13:25:03.557 に答える